我有一个正则表达式,可以以多种重叠的可能方式匹配一个字符串。但是,它似乎只捕获了字符串中的一个可能匹配项,我怎样才能获得所有可能的匹配项?我试过 finditer 但没有成功,但也许我用错了。
我要解析的字符串是:
foo-foobar-foobaz
我使用的正则表达式是:
(.*)-(.*)
>>> s = "foo-foobar-foobaz"
>>> matches = re.finditer(r'(.*)-(.*)', s)
>>> [match.group(1) for match in matches]
['foo-foobar']
我想要匹配项 (foo 和 foobar-foobaz),但它似乎只能匹配 (foo-foobar 和 foobaz)。
请您参考如下方法:
没问题:
>>> regex = "([^-]*-)(?=([^-]*))"
>>> for result in re.finditer(regex, "foo-foobar-foobaz"):
>>> print("".join(result.groups()))
foo-foobar
foobar-foobaz
通过将第二个捕获括号放在 lookahead assertion 中,您可以捕获其内容,而无需在整体匹配中消耗它。
我还使用了 [^-]* 而不是 .* 因为点也与您可能没有的分隔符 - 相匹配'想要。
