How To Use Regular Expressions Do Reverse Search?
For example: My string is: 123456789 nn nn oo nn nn mlm nn203. My target is: nn. Then, I match string from the end to the beginning and return the first match result and its po
Solution 1:
For the string itself, just do a findall and use the last one:
import re
st='123456 nn1 nn2 nn3 nn4 mlm nn5 mlm'print re.findall(r'(nn\d+)',st)[-1]
Prints nn5
You can also do the same thing using finditer
which makes it easier finding the relevant indexes:
print [(m.group(),m.start(),m.end()) for m in re.finditer(r'(nn\d+)',st)][-1]
Prints ('nn5', 27, 30)
If you have a lot of matches and you only want the last, sometimes it makes sense to simply reverse the string and pattern:
m=re.search(r'(\d+nn)',st[::-1])
offset=m.start(1)
print st[-m.start(1)-len(m.group(1)):-m.start(1)]
Prints nn5
Solution 2:
First, if you're not looking for a regular expression, string.rfind
is a lot easier to get right.
You can use a regular expression by using a negative lookahead, see the documentation of 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)
Solution 3:
Idea:
- find reversed regexp (in your case irrelevant) in reversed string
- resulting indexes convert to negative numbers + switch start<->end
Example:
>>>import re>>>s = "123456789 nn nn oo nn nn mlm nn203">>>m = re.search("(nn)", s[::-1])>>>-m.end(), -m.start()
(-5, -3)
Post a Comment for "How To Use Regular Expressions Do Reverse Search?"