Python-如何找到所有出现的子串?
Python具有string.find()
和string.rfind()
获取字符串中子字符串的索引。
我想知道是否有类似的东西string.find_all()
可以返回所有找到的索引(不仅是开头的第一个,还是结尾的第一个)。
例如:
string = "test test test test"print string.find('test') # 0
print string.rfind('test') # 15
#this is the goal
print string.find_all('test') # [0,5,10,15]
回答:
没有简单的内置字符串函数可以满足你的需求,但是你可以使用功能更强大的正则表达式:
import re[m.start() for m in re.finditer('test', 'test test test test')]
#[0, 5, 10, 15]
如果要查找重叠的匹配项,先行搜索将做到:
[m.start() for m in re.finditer('(?=tt)', 'ttt')]#[0, 1]
如果你想要一个没有重叠的反向查找全部,则可以将正向和负向超前组合成这样的表达式:
search = 'tt'[m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')]
#[1]
re.finditer
返回一个generator
,因此你可以更改[]
上面的()
以获得一个Generator
而不是一个列表,如果只迭代一次结果,则列表会更有效。
以上是 Python-如何找到所有出现的子串? 的全部内容, 来源链接: utcz.com/qa/430600.html