现在卡在这个正则表达式问题上 - 我不知道这是否是表达这个问题的正确方法,但我想提取连续匹配的组,例如字符串“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”。
非常感谢任何帮助,谢谢。
最佳答案
(?=((\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)
关于python - 正则表达式帮助匹配多个连续组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30624985/