Home >Backend Development >Python Tutorial >How Can I Find All Occurrences of a Substring in Python?

How Can I Find All Occurrences of a Substring in Python?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-12 21:58:10929browse

How Can I Find All Occurrences of a Substring in Python?

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn