簡體   English   中英

正則表達式替換條件字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM