Python-如何找到所有出现的子串?

发布于 2021-02-02 23:22:42

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]
关注者
0
被浏览
123
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    没有简单的内置字符串函数可以满足你的需求,但是你可以使用功能更强大的正则表达式:

    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而不是一个列表,如果只迭代一次结果,则列表会更有效。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看