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

use*_*511 1 python regex pattern-matching

我有一个正则表达式,可以多种重叠的方式匹配字符串.但是,它似乎只捕获字符串中的一个可能的匹配,我如何获得所有可能的匹配?我试过finditer没有成功,但也许我错了.

我正在尝试解析的字符串是:

foo-foobar-foobaz
Run Code Online (Sandbox Code Playgroud)

我正在使用的正则表达式是:

(.*)-(.*)

>>> s = "foo-foobar-foobaz"
>>> matches = re.finditer(r'(.*)-(.*)', s)
>>> [match.group(1) for match in matches]
['foo-foobar']
Run Code Online (Sandbox Code Playgroud)

我想要比赛(foo和foobar-foobaz),但它似乎只得到(foo-foobar和foobaz).

Tim*_*ker 5

没问题:

>>> regex = "([^-]*-)(?=([^-]*))"
>>> for result in re.finditer(regex, "foo-foobar-foobaz"):
>>>     print("".join(result.groups()))
foo-foobar
foobar-foobaz
Run Code Online (Sandbox Code Playgroud)

通过将第二个捕获括号放在先行断言中,您可以捕获其内容而不会在整体匹配中消耗它.

我也使用[^-]*而不是.*因为点也匹配-你可能不想要的分隔符.