2009-12-08 48 views
1

這是參考一個問題,我之前here找到兩個相同的字符在正則表達式

問我接到一個解決該問題,該問題的字符串,但最終需要用正則表達式去這個特定部分。

我需要一個正則表達式來搜索和替換一個字符串的行中的兩個元音的實例是相同的,所以在「採取」,或「蜜蜂」的「ee」中的「oo」,並替換它其中一個被替換的字母和一個:

預期行爲的一些例子:

"took"應該成爲"to:k"

"waaeek"應該成爲"wa:e:k"

"raaag"應該成爲"ra:ag"

謝謝你的幫助。

+0

什麼「raaaag」?應該改成'ra:a:g'嗎? – 2009-12-08 17:27:01

+0

是的,會的。應該從左到右閱讀(默認情況下它是這樣做的) – roflwaffle 2009-12-08 18:15:02

回答

7

試試這個:

re.sub(r'([aeiou])\1', r'\1:', str) 
1

搜索([aeiou])\1\1:

取代它,我不知道Python,但你應該能夠使正則表達式不區分大小寫和全局的東西,如/([aeiou])\1/gi

+0

感謝SilentGhost的編輯。我不知道python語法 - 只是按照慣例。 – Amarghosh 2009-12-08 17:45:58

0

您需要在搜索表達式中使用反向引用。試試像這樣:([a-z])+\1(或([a-z])\1只是一個雙)。

0

不要做什麼: 如前所述,這將匹配任何兩個元音在一起。留下這個答案作爲不做的一個例子。正確的答案(在這種情況下)是使用反向引用,如許多其他答案中所述。

import re 

data = ["took","waaeek","raaag"] 

for s in data: 
    print re.sub(r'([aeiou]){2}',r'\1:',s) 

這與集合[aeiou]中任何成員的兩次出現{2}完全匹配。並與元音替換它,用括號捕獲()和放置在由\ 1子串後面是「:」

輸出:

to:k 
wa:e:k 
ra:ag 
+0

這將改變'teak'到'ta:k' – Amarghosh 2009-12-08 17:48:22

+0

重複適用於角色等級 - 所以任何兩個連續的元音都會匹配。最後匹配的字符將被捕獲(使用expresso進行測試)。 – Amarghosh 2009-12-08 17:50:26

+1

你每天都會在這個網站上學到新東西。你很對。 – 2009-12-08 17:59:04

相關問題