我需要知道如何在字符串中找到一组字母的所有位置。例如,在字符串“Canyoucanacanasacannercancanacan”中,字母“an”重复7次。我想知道每个人的确切位置,可能在列表中。我该怎么办?
谢谢!
答案 0 :(得分:2)
我会使用re.finditer()
,就像这样:
import re
s = "Canyoucanacanasacannercancanacan"
pattern = "an"
result = [m.start() for m in re.finditer(pattern, s)]
assert result == [1, 7, 11, 17, 23, 26, 30]
请注意,这只会找到非重叠的实例,在您的具体情况下,这些实例都是
。答案 1 :(得分:0)
令人惊讶的是,我无法找到这个问题的副本!您可以使用str.index
执行此操作,同时更新您要查找的起始位置,以排除您已检查过的字符串部分。
s = 'Canyoucanacanasacannercancanacan'
position_list = []
i = 0
while True:
try:
position = s.index('an', i)
except ValueError:
break
position_list.append(position)
i = position + 1
print(position_list)
正如有人建议的那样,您也可以使用str.find
,如下所示:
s = 'Canyoucanacanasacannercancanacan'
position_list = []
i = s.find('an')
while i != -1:
position_list.append(i)
i = s.find('an', i+1)
print(position_list)
答案 2 :(得分:0)
尝试以下操作,您可以根据需要修改输出(开始和结束):
import re
text = "Canyoucanacanasacannercancanacan"
for m in re.finditer(r"an", text):
print('%02d-%02d: %s' % (m.start(), m.end(), m.group(0)))
输出结束:
01-03: an
07-09: an
11-13: an
17-19: an
23-25: an
26-28: an
30-32: an
答案 3 :(得分:0)
您可以创建一个小型生成器来查找文本中所有字母的位置:
StackOverflowException
用法:
def find_positions(text, letters):
curr = text.find(letters)
while curr >= 0:
yield curr
curr = text.find(letters, curr + len(letters))
你得到:
positions = list(find_positions("Canyoucanacanasacannercancanacan", "an"))
print(positions)