pthon 中返回多个相同字串位置
时间: 2024-09-14 21:09:38 浏览: 63
在Python中,如果你想要查找一个字符串在另一个字符串中出现的所有位置,你可以使用`str.find()`或`str.index()`方法结合循环来实现。然而,这些方法每次只能找到一个匹配的位置。如果你想要返回所有匹配的位置,可以使用`str.find()`方法在一个循环中多次调用,每次从上一次找到的位置的下一个位置开始查找,直到字符串的末尾。这里是一个简单的例子:
```python
def find_all_positions(search_str, target_str):
start = 0
positions = []
while start < len(target_str):
pos = target_str.find(search_str, start)
if pos == -1:
break # 如果没有找到,结束循环
positions.append(pos)
start = pos + 1 # 更新查找的起始位置
return positions
# 使用函数的例子
search_str = 'abc'
target_str = 'xabcabcabcz'
positions = find_all_positions(search_str, target_str)
print(positions) # 输出: [1, 5, 9]
```
此外,你还可以使用`re`模块中的正则表达式来查找所有匹配的位置。使用正则表达式时,可以使用`re.finditer()`方法,这个方法返回一个迭代器,它为每一个匹配产生一个`MatchObject`,从中可以获取匹配的位置。
```python
import re
def find_all_positions_regex(search_str, target_str):
regex = re.compile(re.escape(search_str))
matches = re.finditer(regex, target_str)
return [match.start() for match in matches]
# 使用正则表达式函数的例子
search_str = 'abc'
target_str = 'xabcabcabcz'
positions = find_all_positions_regex(search_str, target_str)
print(positions) # 输出: [1, 5, 9]
```
使用`re.escape()`是为了确保字符串中可能包含的任何特殊字符都被正确地转义,以便被正则表达式处理。
阅读全文