正则表达式替换条件字符

时间:2016-07-06 09:38:38

标签: java python regex

我需要删除字符串中的任何'h',如果它出现在元音之后。

E.g.
    John -> Jon
    Baht -> Bat
    Hot -> Hot (no change)
    Rhythm -> Rhythm (no change)

找到单词不是问题,但删除'h'是因为我仍然需要原始的元音。这可以在一个正则表达式中完成吗?

1 个答案:

答案 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)