2016-07-06 13 views
0

母音の後ろにある場合は、文字列内の「h」を削除する必要があります。正規表現を条件文字に置き換えてください。

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

単語を見つけることは問題ではありませんが、「h」を削除することは、元の母音がまだ必要なためです。これは1つの正規表現で行うことができますか?

答えて

2

母音の後hをマッチングするための正規表現は、1

(?<=a|e|y|u|o|a)h 

正の後読みになるとあなたは母音の後に複数のhを持つことができる場合は、しかし

re.sub(r"([a-zA-Z]*?)(?<=a|e|y|u|o|a)h([a-zA-Z]*)",r"\1\2",s) 

を行うことができます正規表現は動的マッチンググループをサポートしていないので、文字列の場合、いくつかの繰り返しを行う必要があります

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

のための多くのsimplierの答えを機能を使用して、より適切な形で

、 `re.sub(R"([AEIOU])と間違って何

re.sub(r"([aeiou])h", r"\1", s, flags = re.I) 
+1

を@tobias_kのおかげh "、r" \ 1 "、s)'?ちょうどうまくいくと思う。また、 're.I'フラグを追加することもできます。 –

+0

@tobias_k何も間違って、答えを編集します、ありがとう! – buld0zzr

+0

ああ..その()私は間違っていた。みんなありがとう – Horseshaq

関連する問題