gpt4 book ai didi

python - 模式内有模式重复的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:57 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式匹配以下字符串

字符串:

These are my variables -abc $def -geh $ijk for case1

These are my variables -lmn $opq -rst $uvw for case2

图案:

These\s+are\s+my\s+variables(?:\s*-(\w+)\s+\$(\w+))*\s+for\s+(case\d)

我可以将上面的字符串与我的模式成功匹配,但问题是我无法按照我的意图捕捉到这些组。我的尝试给了我如下结果

geh, ijk, case1

rst, uvw, case2

我希望组输出如下

abc, def, geh, ijk, case1

lmn, opq, rst, uvw, case2

如何解决这个问题?

Regex Demo

最佳答案

使用PyPi regex module并使用您正在使用的相同正则表达式,如下所示:

import regex
s = 'These are my variables -abc $def -geh $ijk for case1'
rx = regex.compile(r'These\s+are\s+my\s+variables(?:\s*-(\w+)\s+\$(\w+))*\s+for\s+(case\d)')
print([x.captures(1) for x in rx.finditer(s)])
# => [abc, geh]
print([x.captures(2) for x in rx.finditer(s)])
# => [def, ijk]

否则,使用

捕获所有选项
These\s+are\s+my\s+variables((?:\s*-\w+\s+\$\w+)*)\s+for\s+(case\d)

(参见 demo ),并在步骤 2 中获取单独的值。

import re
r = r"These\s+are\s+my\s+variables((?:\s*-\w+\s+\$\w+)*)\s+for\s+(case\d)"
s = "These are my variables -abc $def -geh $ijk for case1"
m = re.search(r, s)
if m:
print(re.findall(r'-(\w+)', m.group(1)))
print(re.findall(r'\$(\w+)', m.group(1)))
print(m.group(2))

参见 Python demo

关于python - 模式内有模式重复的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40823165/

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