Python:查找文本中单词的索引

Python:查找文本中单词的索引,python,enumerate,Python,Enumerate,我有一段文字: JoiskodposkfsdPSTopjijijdjnsnDsjijdStopIsjidinsindistopskndishf 它包含几个站点。我想找到停止发生的所有位置的索引。我该怎么做?我尝试了列表,但我似乎只得到了第一个位置。你能用enumerate吗 谢谢 备注:请使用!它效率更高,可读性更强 您可以简单地迭代该字符串,并检查该字符串(从给定字符开始)是否以“stop”字开始: >>> s = 'joiskodposkfkfsdpsstopjisjijd

我有一段文字:

JoiskodposkfsdPSTopjijijdjnsnDsjijdStopIsjidinsindistopskndishf

它包含几个站点。我想找到停止发生的所有位置的索引。我该怎么做?我尝试了列表,但我似乎只得到了第一个位置。你能用enumerate吗

谢谢

备注:请使用!它效率更高,可读性更强

您可以简单地迭代该字符串,并检查该字符串(从给定字符开始)是否以“stop”字开始:

>>> s = 'joiskodposkfkfsdpsstopjisjijdjnsndsjijdstopisjidinsindistopskndishf'
>>> [pos for pos in range(len(s)) if s[pos:].startswith('stop')]
[18, 39, 55]

另一个选项是重复调用s.find'stop',X是最后一个匹配的位置+1或0(如果您从未进行过匹配)。

您可以使用正则表达式:

import re
for match in re.finditer('stop', text):
    print match.start()

Get Slice的[pos:]不是O1,因此对于给定的文本,此解决方案不如John Zwinck的好。它在我的计算机上的速度慢了7倍,而对于较长的textTrue,则会变得更糟。已经在JohnZwinck的网站上投票了。在这里添加了一个通知以使其更清晰。如果匹配重叠怎么办?我仍然希望找到它们。然后您可以使用re.RegexObject.search和pos参数来指定开始位置。执行一次搜索,然后在第一次搜索结果后的一个字符中执行另一次搜索,依此类推,直到找不到更多匹配项。