gpt4 book ai didi

python - 根据正则表达式中的相同值选择组

转载 作者:行者123 更新时间:2023-12-01 09:18:24 24 4
gpt4 key购买 nike

我有以下内容

ONE
1234234534564 123
34erewrwer323 123
123fsgrt43232 123
TWO
42433412133fr 234
fafafd3234132 342
THREE
sfafdfe345233 3234
FOUR
324ereffdf343 4323
fvdafasf34nhj 4323
fsfnhjdgh342g 4323

考虑一、二、三和四是单独的组。因为我只想根据条件匹配一个每个组中每一行的第二个值必须相同,并且它将匹配其中有多于一行的组..我如何在正则表达式中做到这一点

我已经尝试过遵循正则表达式,但它不符合标准

\w+\n\w+\t(\d+)(\n\w+\t\1){2,}

最佳答案

您可以使用

r'(?m)^[A-Z]+\r?\n\S+\s+(\d+)(?:\r?\n\S+\s+\1)+$'

请参阅regex demo .

详细信息

  • (?m) - 启用 re.MULTILINE 模式以使 ^/$ 匹配开始和结束分别有多少行
  • ^ - 行的开头
  • [A-Z]+ - 1 个以上大写 ASCII 字母(根据需要进行调整)
  • \r?\n - 换行符,例如 CRLF 或 LF
  • \S+ - 1 个以上非空白字符
  • \s+ - 1 个空格(如果制表符是字段分隔符,则使用 \t)
  • (\d+) - 捕获组 1、一位或多位数字
  • (?:\r?\n\S+\s+\1)+ - 一次或多次重复换行符,后跟 1+ 个非空格、1+ 个空格和相同值与组 1 中一样,因为 \1 是对该组中存储的值的反向引用
  • $ - 行尾。

在Python中,使用re.finditer:

for m in re.finditer(r'(?m)^[A-Z]+\r?\n\S+\s+(\d+)(?:\r?\n\S+\s+\1)+$', text):
print(m.group())

请参阅Python demo .

关于python - 根据正则表达式中的相同值选择组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51021497/

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