我想匹配字符串中最后一个简单模式的出现,例如
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)
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
保持最后一个匹配,并适用于模式和搜索字符串的所有组合.您可能希望设置match
为None
first,因为如果没有匹配项,match
则不会设置为任何值.
归档时间: |
|
查看次数: |
33278 次 |
最近记录: |