I want to match the last occurrence of a simple pattern in a string, e.g.
list = re.findall(r"\w+ AAAA \w+", "foo bar AAAA foo2 AAAA bar2") print "last match: ", list[len(list)-1]
However, if the string is very long, a huge list of matches is generated. Is there a more direct way to match the second occurrence of " AAAA ", or should I use this workaround?
you could use
$ that denotes end of the line character:
>>> s = """foo bar AAAA foo2 AAAA bar2""" >>> re.findall(r"\w+ AAAA \w+$", s) ['foo2 AAAA bar2']
Also, note that
list is a bad name for your variable, as it shadows built-in type. To access the last element of a list you could just use
>>> lst = [2, 3, 4] >>> lst[-1] 4
You can avoid the building of a list just by iterating over all matches and keeping the last match:
for match in re.finditer(r"\w+ AAAA \w+", "foo bar AAAA foo2 AAAA bar2"): pass
match holds the last match, and works for all combinations of pattern and searched string. You might want to set
None first, because if there's no match,
match won't be set to any value.