我想匹配字符串中最后一个简单模式的出现,例如
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为Nonefirst,因为如果没有匹配项,match则不会设置为任何值.
| 归档时间: |
|
| 查看次数: |
33278 次 |
| 最近记录: |