Регулярное выражение для сопоставления h
после гласного будет позитивным просмотром назад один
(?<=a|e|y|u|o|a)h
И вы можете сделать
re.sub(r"([a-zA-Z]*?)(?<=a|e|y|u|o|a)h([a-zA-Z]*)",r"\1\2",s)
Однако, если вы можете иметь более одного h
после гласной строка, вам нужно будет выполнить несколько итераций, так как regex не поддерживает группы динамического сопоставления
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))
гораздо проще ответ, благодаря @tobias_k
re.sub(r"([aeiou])h", r"\1", s, flags = re.I)
Что случилось с 're.sub (г" ([AEIOU]) h ", r" \ 1 ", s)'? Кажется, все прекрасно работает. Кроме того, можно добавить флаг 're.I'. –
@tobias_k ничего плохого, отредактируйте ответ, спасибо! – buld0zzr
Ahhh .. its the() Я ошибался. Спасибо, парни – Horseshaq