2017-04-09 1 views
1

각 모음 다음에 나오는 첫 글자를 찾아서 인쇄하려면이 코드를 작성하십시오. 두 개의 연속 된 모음으로 단어를 입력 할 때를 제외하고 작동합니다. 두 번째 모음을 무시합니다. 예를 들어, 결과는해야 내가 입력 '학년'경우 :문장의 각 모음 다음에 첫 글자를 검색하고 인쇄하는 방법은 무엇입니까?

o 
l 
a 
r 

하지만 난 단지 얻을

o 
a 

그래서 내가 잘못 뭐하는 거지? 나는 Python을 처음 접했고 아직도 배우고있다.

def find_after_vowel(word): 
for match in re.findall(r"[ouieaOUIEA](\w{1}|\s)", word): 
     print (match) 
+1

당신은 일치 할 수

o l a r 

당신이 그것을 대신 결과, 사용을 인쇄의 목록을 반환하려면 '+ '가있는 하나 이상의 모음; 'r '[aeiou] + (.)''(대문자 소문자를 구별하기 위해서're.I'를 사용합니다). – jonrsharpe

+0

그룹 2에 자음을 넣고 싶습니까? 그럼 왜'\ w'와'\ s'를 사용 했습니까? [((? i) ([ouiea]) ((?! [ouiea]) [a-z])'] (https://regex101.com/r/wbH1JM/1)을 참조하십시오. –

+0

@jonrsharpe 고마워요. 어디에서're.I'을 사용해야합니까? – Sarah

답변

3

당신은 finditer를 사용할 수 있으며, 그 결과 일치하는 개체의 start 방법을 찾을 : [ouieaOUIEA]([^ouieaOUIEA]|\s)

+0

정말 고마워요. '.findall '과'.finditer'의 차이점을 설명해 주시겠습니까? 나는 그것에 대해 읽었지만 아직도 그 차이를 이해하지 못한다. – Sarah

+2

당신을 진심으로 환영합니다. 'findall'은 매치를 문자열리스트로 반환하는 반면'finditer'는 iterable을 반환하여'MatchObject' 인스턴스를 생성합니다. 이 작업을 위해 MatchObject 인스턴스는 해당 일치, 즉 색인에 대한 위치 정보가 포함되어 있기 때문에 필요합니다. 자세한 내용은 https://docs.python.org/2/library/re.html을 참조하십시오. –

0

다음 정규식보십시오 :

import re 

def find_after_vowel(word): 
    index = re.search(r'[ouieaOUIEA]', word).span()[0] + 1 
    return word[index] 

print(find_after_vowel('test')) # s 
print(find_after_vowel('abc')) # b 
print(find_after_vowel('def')) # f 
print(find_after_vowel('abcdef')) # b 
0

내가 바로 당신을 이해하는 경우를, 당신이 시도 할 수 있습니다 각 일치의 색인 다음에 각 모음 다음에 문자를 가져 오는 데 사용합니다.

import re 

def find_after_vowel(word): 
    for match in re.finditer(r"[ouieaOUIEA]", word): 
      print word[match.start()+1] 

find_after_vowel("school year") 

어떤 출력 :

import re 

def find_after_vowel(word): 
    after_vowels = [] 
    for match in re.finditer(r"[ouieaOUIEA]", word): 
      after_vowels.append(word[match.start()+1]) 
    return after_vowels 

after_vowels = find_after_vowel("school year") 
print after_vowels 

출력됩니다 :

['o', 'l', 'a', 'r'] 
+0

마지막 출력에서 ​​"b"및 "f"출력을 원합니다 – Sarah

관련 문제