如何使用正则表达式进行反向搜索?

Aur*_*icu 8 python regex search reverse

例如:
我的字符串是:123456789 nn nn oo nn nn mlm nn203.
我的目标是:nn.

然后,我匹配从结尾到开头的字符串,并返回第一个匹配结果及其位置.
在此检查中,结果nn从[ - 3]中的[-5]结束开始.
我写了简单的funcitonto做这个过程,但如何使用正则表达式来完成这项工作?

daw*_*awg 12

对于字符串本身,只需执行findall并使用最后一个:

import re

st='123456 nn1 nn2 nn3 nn4 mlm nn5 mlm'

print re.findall(r'(nn\d+)',st)[-1]
Run Code Online (Sandbox Code Playgroud)

打印 nn5

您也可以使用相同的东西来finditer查找相关索引:

print [(m.group(),m.start(),m.end()) for m in re.finditer(r'(nn\d+)',st)][-1]
Run Code Online (Sandbox Code Playgroud)

打印 ('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)]
Run Code Online (Sandbox Code Playgroud)

打印 nn5


Tho*_*nzl 5

首先,如果您不是在寻找正则表达式,那么string.rfind做对就容易多了。

您可以通过使用否定前瞻来使用正则表达式,请参阅re的文档:

import re
s = "123456789 nn nn oo nn nn mlm nn203"
match = re.search("(nn)(?!.*nn.*)", s)

# for your negative numbers:
print (match.start()-len(s), match.end()-len(s))
# (-5, -3)
Run Code Online (Sandbox Code Playgroud)