正则表达式帮助匹配多个连续组

时间:2015-06-03 15:52:51

标签: python regex

暂时解决这个正则表达式问题 - 我不知道这是否是表达此问题的正确方法,但我想提取连续匹配的组,例如字符串" a-> B-&以及c"我想为" a-> b"创建匹配组。 &安培; " B-&以及c"还有个别角色,所以" a"," b"和" c"。到目前为止,我有这个正则表达式:

"(([A-Z a-z 0-9 _]+)(?:\s*->\s*)([A-Z a-z 0-9 _]+))" 

只能成功匹配群组" a-> b"," a" &安培; " B"而不是" b-> c" &安培; " C"

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

(?=((\w+)\s*->\s*(\w+)))

请尝试使用re.findall。请参阅演示。正则表达式无法正常工作的原因是因为匹配重叠。首次匹配完成后,->之前没有元素匹配。要克服此问题我们使用lookahead,它不捕获但是断言

https://regex101.com/r/pG1kU1/32

import re
p = re.compile(r'(?=((\w+)\s*->\s*(\w+)))')
test_str = "a->b->c"

re.findall(p, test_str)