2016-04-22 60 views
-4

更換正則表達式說我有新的正則表達式

「一個雜技演員躍過的橋樑」

,我想改變這

「的雜技演員在橋上跳下」。

現在,我使用

lyrics = re.sub(r" a (a|e|i|o|u|y){1}([a-z]+|[A-Z]+)", r" an (a|e|i|o|u|y){1}([a-z]+|[A-Z]+)", lyrics)

並且生成的字符串不我希望它會按預期的方式取代。我還能如何做到這一點?

爲了澄清,我希望能夠針對每種情況對此進行概括,而不僅僅是我在上面使用的示例。

+0

你可以添加一些關於你的正則表達式的更多細節嗎?替換?現在聽起來好像你想把「a」變成「an」,把「an」變成「a」,但是我從你當前的正則表達式猜測你試圖做更多的事情嗎? – alexanderbird

+0

第二個參數're.sub'獲得'string',而不是'regexp'。你不能用're.sub'代替它。 – JRazor

+0

@alexanderbird道歉..我用錯了正則表達式 – dbalagula23

回答

1

根據英語語法,an出現在以元音開頭的單詞之前。對於您可以使用此:

>>> import re 
>>> re.sub(r'\ba\b(?=\s+[aeiouAEIOU])', 'an', "a acrobat jumped over a bridge") 
'an acrobat jumped over a bridge' 
>>> re.sub(r'\ba\b(?=\s+[aeiouAEIOU])', 'an', "a elephant") 
'an elephant' 
>>> 

通知,aacorbat前橋還沒有改變之前已被更改爲an,而a。此外a之前elephant已被更改爲an,因此上述正則表達式是泛化和適用於所有單詞。

這裏我們使用:'\ba\b(?=\s+[aeiouAEIOU])'

\ba\b試圖在兩側匹配文字a與字邊界 (?=\s+[aeioudAEIOU])確保元音空間和元音字符正向前查找

要與an可以取代所有a使用這個:

>>> re.sub(r'\ba\b', 'an', "a bridge") 
'an bridge' 
+0

這很好,但我怎麼才能使正則表達式可概括?爲了讓它適用於每個字組合 – dbalagula23

+0

@ dbalagula23上面的答案是一般化的,它適用於所有的字詞組合,請參閱'elephant'示例 – ritesht93

+0

啊,我現在看到了。謝謝 – dbalagula23