编程语言
首页 > 编程语言> > 获取正则表达式的所有可能匹配项(在python中)?

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

作者:互联网

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

我还用[^-] *代替了.*,因为该点还与分隔符匹配-您可能不希望这样.

标签:python,regex,pattern-matching
来源: https://codeday.me/bug/20191009/1882317.html