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]
我需要知道如何找到字符串中一组字母的所有位置。例如,在字符串 "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]