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

标签 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”。

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

最佳答案

(?=((\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/

相关文章:

Javascript RegExp 将字符串中的所有数字减一

python BeautifulSoup 获取特定元素

python - 遍历数据框以填充 API 请求

python - Pygame - 在 Sprite 中加载图像

python - 如何? : Setting up Bokeh w/Redis Backend

javascript - 如何从同一数组中搜索以其他词开头和结尾的词?

python - 如何使用 Flask 检索 session 数据?

javascript - Jquery RegEx 仅以加号或减号以及数字开头

python - Python 是否有正则表达式的最大组引用(如 Perl)?

regex - Perl 就地编辑 : Find and replace in X12850 formatted file