문자열에서 문자 그룹의 모든 위치를 찾는 방법을 알아야합니다. 예를 들어, 문자열 "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'을 반환하고 발견되면 while 루프! = -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"은 ** 문자 **가 아니며 부분 문자열입니다. –