更換正則表達式說我有新的正則表達式
「一個雜技演員躍過的橋樑」
,我想改變這
「的雜技演員在橋上跳下」。
現在,我使用
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)
並且生成的字符串不我希望它會按預期的方式取代。我還能如何做到這一點?
爲了澄清,我希望能夠針對每種情況對此進行概括,而不僅僅是我在上面使用的示例。
更換正則表達式說我有新的正則表達式
「一個雜技演員躍過的橋樑」
,我想改變這
「的雜技演員在橋上跳下」。
現在,我使用
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)
並且生成的字符串不我希望它會按預期的方式取代。我還能如何做到這一點?
爲了澄清,我希望能夠針對每種情況對此進行概括,而不僅僅是我在上面使用的示例。
根據英語語法,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'
>>>
通知,a
acorbat
前橋還沒有改變之前已被更改爲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'
這很好,但我怎麼才能使正則表達式可概括?爲了讓它適用於每個字組合 – dbalagula23
@ dbalagula23上面的答案是一般化的,它適用於所有的字詞組合,請參閱'elephant'示例 – ritesht93
啊,我現在看到了。謝謝 – dbalagula23
你可以添加一些關於你的正則表達式的更多細節嗎?替換?現在聽起來好像你想把「a」變成「an」,把「an」變成「a」,但是我從你當前的正則表達式猜測你試圖做更多的事情嗎? – alexanderbird
第二個參數're.sub'獲得'string',而不是'regexp'。你不能用're.sub'代替它。 – JRazor
@alexanderbird道歉..我用錯了正則表達式 – dbalagula23