Finding All Occurrences of a Substring in Python
In Python, you can use the string.find() and string.rfind() methods to retrieve the index of a substring within a larger string. However, there isn't a built-in function specifically designed to return all occurrences of a substring.
Using Regular Expressions
A more powerful approach to finding multiple substring occurrences is to employ regular expressions:
import re # Sample string string = "test test test test" # Find all occurrences of "test" matches = [m.start() for m in re.finditer('test', string)] print(matches) # Output: [0, 5, 10, 15]
re.finditer generates a generator that yields individual match objects. Each match object provides the starting index of a matching substring.
Considering Overlapping Matches
By default, re.finditer looks for non-overlapping matches. To find overlapping matches, use a positive lookahead:
matches = [m.start() for m in re.finditer('(?=tt)', 'ttt')] print(matches) # Output: [0, 1]
The expression (?=tt) asserts that the substring "tt" appears at the current position but doesn't consume it.
Reverse Find-All Without Overlaps
To perform a reverse find-all without overlapping matches, combine positive and negative lookahead:
search = 'tt' matches = [m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')] print(matches) # Output: [1]
This expression ensures that "tt" appears immediately after the cursor but not within a certain lookback range (len(search)-1) in the reverse direction.
The above is the detailed content of How Can I Find All Occurrences of a Substring in Python?. For more information, please follow other related articles on the PHP Chinese website!