Skip to main content
 首页 » 编程设计

python之获取正则表达式的所有可能匹配项(在 python 中)

2025年05月04日20shangdawei

我有一个正则表达式,可以以多种重叠的可能方式匹配一个字符串。但是,它似乎只捕获了字符串中的一个可能匹配项,我怎样才能获得所有可能的匹配项?我试过 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 中,您可以捕获其内容,而无需在整体匹配中消耗它。

我还使用了 [^-]* 而不是 .* 因为点也与您可能没有的分隔符 - 相匹配'想要。