Python 2.7、如何找到一组字母在字符串中的位置?

Python 2.7, how can I find the position of group of letters in a string?

我需要知道如何找到字符串中一组字母的所有位置。例如,在字符串 "Canyoucanacanasacannercancanacan" 中,字母 "an" 重复出现了 7 次。我想知道每个人的确切位置,可能在列表中。我该怎么办?

谢谢!

令人惊讶的是我找不到这个问题的副本!您可以使用 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)

尝试以下操作,您可以根据需要修改输出(开始和结束):

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

我会使用 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]

请注意,这只会找到 非重叠 个实例,在您的特定情况下是所有实例。

您可以创建一个小型生成器来查找文本中字母的所有位置:

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)

你得到:

[1, 7, 11, 17, 23, 26, 30]