How can I find all matches to a regular expression in Python?

python, regex, search, string

Solution

Use `re.findall` or `re.finditer` instead.

`re.findall(pattern, string)` returns a list of matching strings.

`re.finditer(pattern, string)` returns an iterator over `MatchObject` objects.

Example:

re.findall( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')
# Output: ['cats', 'dogs']

[x.group() for x in re.finditer( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')]
# Output: ['all cats are', 'all dogs are']

Problem

When I use the `re.search()` function to find matches in a block of text, the program exits once it finds the first match in the block of text. How do I do this repeatedly where the program doesn't stop until ALL matches have been found? Is there a separate function to do this?

Original source