我需要删除字符串中的任何'h',如果它出现在元音之后。
E.g.
John -> Jon
Baht -> Bat
Hot -> Hot (no change)
Rhythm -> Rhythm (no change)
找到单词不是问题,但删除'h'是因为我仍然需要原始的元音。这可以在一个正则表达式中完成吗?
答案 0 :(得分:2)
在元音之后匹配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
,则需要进行多次迭代,因为正则表达式不支持动态匹配组
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)