gpt4 book ai didi

regex - 使用正则表达式捕获两条不同的线

转载 作者:行者123 更新时间:2023-12-02 04:23:01 28 4
gpt4 key购买 nike

我想在一个变量中捕获两行,就像这是我的输入:

玫瑰 0 82
ABC 0 0
ABC(备份)0 0
ABC XYZ 637 2021
ABC XYZ(备份)0 0
ABC EXYZ 0 0

我想捕获粗体的行。

我试过这段代码:

var = re.search("ABC\s+\d+\s+ .*\n(.*)\nABC XYZ .*",file_name)

但它给我这样的输出:

ABC                           0                        0
ABC (Backup) 0 0
ABC XYZ 637 2021

我的预期输出是这样的:

ABC                           0                        0
ABC XYZ 637 2021

有人可以建议需要进行哪些修改。

最佳答案

你可以使用

re.search("^(ABC[ \t]+\d+[ \t].*\n).*\n(ABC[ \t]+XYZ[ \t].*)",s, re.MULTILINE)

正则表达式将找到您需要的匹配项并将 2 行捕获到单独的捕获组中。然后,检查是否存在匹配项,如果匹配项,则连接两个捕获组值。

参见 Python demo

import re
s="""Rose 0 82
ABC 0 0
ABC (Backup) 0 0
ABC XYZ 637 2021
ABC XYZ (Backup) 0 0
ABC EXYZ 0 0"""

v = re.search("^(ABC[ \t]+\d+[ \t].*\n).*\n(ABC[ \t]+XYZ[ \t].*)",s, re.MULTILINE)
if v:
print("{}{}".format(v.group(1), v.group(2)))

输出:

ABC                           0                        0
ABC XYZ 637 2021

图案细节

  • ^ - 行首(由于 re.MULTILINE)
  • (ABC[\t]+\d+[\t].*\n) - 捕获第 1 组:ABC,1+ 个空格或制表符,1+数字、空格或制表符,然后是换行符
  • .*\n - 整个下一行
  • (ABC[\t]+XYZ[\t].*) - - 捕获第 2 组:ABC,1+ 个空格或制表符,XYZ ,一个空格或制表符,然后是该行的其余部分。

关于regex - 使用正则表达式捕获两条不同的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58005439/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com