Find last match with python regular expression


Question

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?

1
25
7/21/2019 12:56:51 AM

Accepted Answer

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 [-1] index:

>>> lst = [2, 3, 4]
>>> lst[-1]
4
30
5/10/2010 11:25:04 AM

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

After this, match holds the last match, and works for all combinations of pattern and searched string. You might want to set match to None first, because if there's no match, match won't be set to any value.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon