我需要知道如何找到字符串中所有字母組的位置。例如,在字符串「Canyoucanacanasacannercancanacan」中,字母「an」重複7次。我想知道每個人的確切位置,可能在一個列表中。我能怎麼做?Python 2.7,我怎樣才能找到字符串中的字母組的位置?
謝謝!
我需要知道如何找到字符串中所有字母組的位置。例如,在字符串「Canyoucanacanasacannercancanacan」中,字母「an」重複7次。我想知道每個人的確切位置,可能在一個列表中。我能怎麼做?Python 2.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)
你可以使用'.find',如果沒有找到,返回'-1',然後找到時循環!= -1' –
好建議!我不知道我喜歡哪一個。 –
好吧,關於使用'.index'的好處在於它適用於*所有序列*,所以'tuple','list','range'等 –
嘗試以下,如你願意,你可以修改輸出(開始和結束):
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]
您可以通過編寫代碼開始並告訴我們你有什麼並不指望我們爲你做 –
你到目前爲止嘗試了什麼? – JRG
IMO,「an」不是**字母**,而是一個子字符串。 –