例如:
我的字符串是:123456789 nn nn oo nn nn mlm nn203
。
我的目標是:nn
。如何使用正則表達式進行反向搜索?
然後,我匹配從結尾到開頭的字符串,並返回第一個匹配結果及其位置。
在這個例子中,結果是nn
在[-5]結尾在[-3]中開始。
我寫了簡單的funcitonto做這個過程,但是如何使用正則表達式來完成這個工作?
例如:
我的字符串是:123456789 nn nn oo nn nn mlm nn203
。
我的目標是:nn
。如何使用正則表達式進行反向搜索?
然後,我匹配從結尾到開頭的字符串,並返回第一個匹配結果及其位置。
在這個例子中,結果是nn
在[-5]結尾在[-3]中開始。
我寫了簡單的funcitonto做這個過程,但是如何使用正則表達式來完成這個工作?
首先,如果你不想尋找一個正則表達式,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)
對於字符串本身,只是做的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
理念:
例子:
>>> import re
>>> s = "123456789 nn nn oo nn nn mlm nn203"
>>> m = re.search("(nn)", s[::-1])
>>> -m.end(), -m.start()
(-5, -3)
嗯,如果搜索term是'na',你想讓它匹配字符串中的前進還是後退(即匹配人或姓名)? – 2013-05-12 17:18:13