2016-07-06 4 views
0

모음 뒤에 오는 경우 문자열에서 'h'를 제거해야합니다.정규식 대체 정규식 문자

단어를 찾는 것이 문제가되지 않지만 'h'를 제거하는 것은 원래 모음이 필요하기 때문입니다. 한 정규 표현식에서이 작업을 수행 할 수 있습니까?

답변

2

개 이상의 h을 가질 수 있습니다 경우 모음에서 후, 그러나

re.sub(r"([a-zA-Z]*?)(?<=a|e|y|u|o|a)h([a-zA-Z]*)",r"\1\2",s) 

을 할 수있는 하나의

(?<=a|e|y|u|o|a)h 

그리고 긍정적 인 lookbehind에게 것 모음 후 h 일치하는 정규식 문자열은 정규식이 동적 일치 그룹을 지원하지 않기 때문에 여러 번 반복해야합니다.

import re 

s = "bahtbaht" 
s1 = s 

while True: 
    s1 = re.sub(r"([a-zA-Z]*?)(?<=a|e|y|u|o|a)h([a-zA-Z]*)",r"\1\2",s) 
    if len(s1) == len(s): 
     break 
    s = s1 

print(s1) 
repl

import re 

def subit(m): 
    match, = m.groups() 
    return match 

s = "bahtbaht" 

print(re.sub(r"([a-zA-Z]*?)(?:(?<=a|e|y|u|o|a)h|$)",subit,s)) 

훨씬 더 간단 대답 함수를 사용하여보다 적절한 형태에서

(10), 감사 @tobias_k하기 "의 re.sub (R`잘못 무엇

re.sub(r"([aeiou])h", r"\1", s, flags = re.I) 
+1

([AEIOU]) h ", r"\ 1 ", s)'? 잘 작동하는 것 같습니다. 또한're.I' 플래그를 추가 할 수 있습니다. –

+0

@tobias_k 아무 것도 잘못 대답을 편집합니다, 감사합니다! – buld0zzr

+0

아 ... 그게 잘못되고 있어요. 고마워. – Horseshaq