[英]find not just the first index of a substring in a string - python 2.7
so I know that str.index(substring, begin, end=len(str)) returns the first index of a substring starting from begin. 所以我知道str.index(substring,begin,end = len(str))返回从begin开始的子字符串的第一个索引。 Is there a better (faster, cleaner) way of getting the next index of a string than simply changing the begin index to be that of the last occurance + the length of the target string?
获取字符串的下一个索引的方法是否更好(更快,更清晰),而不是简单地将开始索引更改为最后一次出现的索引+目标字符串的长度? ie (this is the code i'm running)
即(这是我正在运行的代码)
full_string = "the thing is the thingthe thing that was the thing that did something to the thing."
target_string = "the thing"
count = full_string.count(target_string)
print 'Count:', count
indexes = []
if (count > 0):
indexes.append(full_string.index(target_string))
i = 1
while (i < count):
start_index = indexes[len(indexes) - 1] + len(target_string)
current_index = full_string.index(target_string, start_index)
indexes.append(current_index)
i = i + 1
print 'Indexes:', indexes
output: 输出:
Count: 5
Indexes: [0, 13, 22, 41, 73]
You can use re.finditer
and a list comprehension: 您可以使用
re.finditer
和列表理解:
>>> import re
>>> [m.start() for m in re.finditer(target_string, full_string)]
[0, 13, 22, 41, 73]
The match objects have two useful methods .start()
and .end()
, these return the start and end indices of sub-string matched by the current group. 匹配对象有两个有用的方法
.start()
和.end()
,它们返回当前组匹配的子字符串的开始和结束索引。
Another way using slicing: 使用切片的另一种方法:
>>> [i for i in xrange(len(full_string) - len(target_string) + 1)
if full_string[i:i+len(target_string)] == target_string]
[0, 13, 22, 41, 73]
You can create a simple generator: 您可以创建一个简单的生成器:
def gsubstrings(string, sub):
i = string.find(sub)
while i >= 0:
yield i
i = string.find(sub, len(sub) + i)
>>> list(gsubstrings(full_string, target_string))
[0, 13, 22, 41, 73]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.