获取正则表达式的所有可能匹配项(在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