[英]Regex replace conditional character
我需要刪除字符串中的任何“ h”(如果在元音之后)。
E.g.
John -> Jon
Baht -> Bat
Hot -> Hot (no change)
Rhythm -> Rhythm (no change)
找到單詞不是問題,但是刪除“ h”是因為我仍然需要原始的元音。 可以在一個正則表達式中完成嗎?
在元音之后匹配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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.