2017-09-19 5 views
0

문자열에서 문자 그룹의 모든 위치를 찾는 방법을 알아야합니다. 예를 들어, 문자열 "Canyoucanacanasacannercancanacan"에서 문자 "an"은 7 번 반복됩니다. 각 목록의 정확한 위치를 알고 싶을 수도 있습니다. 어떻게해야합니까?Python 2.7에서 문자열의 글자 그룹 위치를 어떻게 찾을 수 있습니까?

감사합니다.

+3

당신은 코드를 작성하여 시작 그리고 우리가 당신을 위해 우리가 당신을 위해 할 것으로 기대하지 않는 것을 보여줍니다. –

+0

지금까지 어떤 시도를 했습니까? – JRG

+0

IMO, "an"은 ** 문자 **가 아니며 부분 문자열입니다. –

답변

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) 
+1

'.find'를 사용할 수 있습니다. 발견되지 않으면'-1'을 반환하고 발견되면 while 루프! = -1' –

+0

좋습니다! 나는 내가 어느 것을 선호하는지 모른다. –

+0

글쎄,'.index' 사용에 대한 좋은 점은 * 모든 시퀀스 *에 대해서 작동한다는 것입니다. 그래서'tuple','list','range' 등등 –

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 
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] 

하는 것으로.

0

당신은 텍스트 문자의 모든 위치를 찾기 위해 작은 발전기를 만들 수 있습니다

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] 
관련 문제