当前位置: 首页 > 面试题库 >

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

羊舌光赫
2023-03-14
问题内容

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



 类似资料:
  • 问题内容: 我在这里有Swift的String类的扩展,该扩展返回给定子字符串的第一个字母的索引。 谁能帮我做到这一点,这样它将返回所有出现的数组,而不仅仅是第一个出现的数组? 谢谢。 例如,除了返回值,我想要类似 问题答案: 您只是不断扩大搜索范围,直到找不到子字符串的任何更多实例:

  • 问题内容: 在我正在研究的基于Linux的项目中,我需要能够找到我的所有子进程。每次启动时都进行记录是不可行的-需要在事实之后找到它们。这必须是纯C语言,而我想不读取/ proc就这样做。有谁知道如何做到这一点? 问题答案: 我发现您的评论认为,将进程的创建记录为奇数是不可行的,但是如果您真的做不到(可能是因为您不知道将创建多少个进程,并且不想保留内存) ),那么我可能会打开所有与该glob匹配的

  • 问题内容: 我需要一种工作方法来获取所有从Python基类继承的类。 问题答案: 新型类(即objectPython中默认的from的子类)具有一种返回子类的方法: 这是子类的名称: 这是子类本身: 确认确实将子类Foo列为其基础: 请注意,如果需要子类,则必须递归: 请注意,如果尚未执行子类的类定义(例如,如果尚未导入子类的模块),则该子类尚不存在,也将找不到它。 你提到“给定名称”。由于Pyt

  • 问题内容: 我试图在JavaScript数组中找到元素的所有实例的索引,例如“ Nano”。 我尝试了jQuery.inArray或类似的.indexOf(),但是它只给出了元素的最后一个实例的索引,在这种情况下为5。 如何获得所有实例的信息? 问题答案: 该方法有一个可选的第二个参数,用于指定从其开始搜索的索引,因此您可以在循环中调用它以查找特定值的所有实例: 您并没有真正弄清楚如何使用索引,因

  • 问题内容: 我需要解析一个HTML文档并查找其中所有出现的字符串。 我目前将HTML加载到字符串变量中。我只需要字符位置,这样我就可以遍历列表以在字符串之后返回一些数据。 该函数仅返回第 一个 匹配项。如何 全部 归还呢? 问题答案: 在不使用正则表达式的情况下,类似这样的方法应该可以返回字符串位置:

  • 问题内容: 我正在实现一个接口,现在我想在classpath中获得该接口的所有实现。这可能还是我应该做些其他的事情? 问题答案: 充其量,这将是昂贵的。在最坏的情况下(取决于类加载器),这可能是不可能的。 我强烈建议您寻找一种替代方法来解决您要解决的基本问题。