对于字符串本身,只需执行一次findall并使用最后一个结果:
import re
st='123456 nn1 nn2 nn3 nn4 mlm nn5 mlm'
print(re.findall(r'(nn\d+)',st)[-1])
打印出nn5
你也可以使用finditer
来完成同样的事情,这会更容易地找到相关的索引:
print([(m.group(),m.start(),m.end()) for m in re.finditer(r'(nn\d+)',st)][-1])
打印('nn5', 27, 30)
如果有很多匹配项,而你只需要最后一个,有时候将字符串和模式反转是有意义的:
m=re.search(r'(\d+nn)',st[::-1])
offset=m.start(1)
print(st[-m.start(1)-len(m.group(1)):-m.start(1)])
或者,将您的模式修改为仅最后一次匹配可能满足的内容:
# since fixed width, you can use a lookbehind:
m=re.search(r'(...(?<=nn\d)(?!.*nn\d))',st)
if m: print(m.group(1))
或者,利用贪婪模式的 .*
,它总是返回多个匹配中的最后一个:
# .* will skip to the last match of nn\d
m=re.search(r'.*(nn\d)', st)
if m: print(m.group(1))
任何这些打印品都包含nn5