查找python正则表达式的最后一个匹配项

SDD*_*SDD 27 python regex

我想匹配字符串中最后一个简单模式的出现,例如

list = re.findall(r"\w+ AAAA \w+", "foo bar AAAA foo2 AAAA bar2")
print "last match: ", list[len(list)-1]
Run Code Online (Sandbox Code Playgroud)

但是,如果字符串长,则会生成大量匹配项.是否有更直接的方法来匹配"AAAA"的第二次出现或我应该使用此变通方法?

Sil*_*ost 30

你可以使用$它表示行结束符:

>>> s = """foo bar AAAA
foo2 AAAA bar2"""
>>> re.findall(r"\w+ AAAA \w+$", s)
['foo2 AAAA bar2']
Run Code Online (Sandbox Code Playgroud)

另外,请注意,这list是一个错误的变量名称,因为它会影响内置类型.要访问列表的最后一个元素,您只需使用[-1]索引:

>>> lst = [2, 3, 4]
>>> lst[-1]
4
Run Code Online (Sandbox Code Playgroud)

  • 这对于这样的输入字符串不起作用:"foo bar AAAA foo2 AAAA bar2 bar3".当然,我们不知道这种情况是否可能,我们没有足够的信息. (3认同)

tzo*_*zot 24

您可以通过迭代所有匹配并保留最后一个匹配来避免构建列表:

for match in re.finditer(r"\w+ AAAA \w+", "foo bar AAAA foo2 AAAA bar2"):
    pass
Run Code Online (Sandbox Code Playgroud)

在此之后,match保持最后一个匹配,并适用于模式搜索字符串的所有组合.您可能希望设置matchNonefirst,因为如果没有匹配项,match则不会设置为任何值.

  • 这在很多用例中非常有用。您通常希望替换所有出现的模式,然后自定义处理输入字符串的最后部分。 (2认同)