例如:
我的字符串是:123456789 nn nn oo nn nn mlm nn203
。
我的目标是:nn
。
然后,我从头到尾匹配字符串,并返回第一个匹配结果及其位置。
在此示例中,结果nn
以 [-5] 开始,以 [-3] 结束。
我写了简单的函数来完成这个过程,但是如何使用正则表达式来完成这个工作呢?
对于字符串本身,只需做一个 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)]
印刷nn5
首先,如果您不是在寻找正则表达式,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)
主意:
例子:
>>> import re
>>> s = "123456789 nn nn oo nn nn mlm nn203"
>>> m = re.search("(nn)", s[::-1])
>>> -m.end(), -m.start()
(-5, -3)