用新的正则表达式替换正则表达式

时间:2016-04-22 04:47:44

标签: python regex

说我有

“一个杂技演员跳过一座桥”

我希望将其更改为

“一个杂技演员跳过一座桥”。

现在,我正在使用

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)

并且结果字符串不会像我预期的那样以我希望的方式替换。我怎么能这样做?

为了澄清,我希望能够为每个案例概括一下,而不仅仅是我上面使用的例子。

1 个答案:

答案 0 :(得分: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'
>>> 

注意,a之前的acorbat已更改为an,而未更改过桥之前的a。此外a之前的elephant已更改为an,因此上述正则表达式已推广并适用于所有单词。

我们正在使用:'\ba\b(?=\s+[aeiouAEIOU])'

\ba\b尝试将文字a与任意一侧的字边界相匹配 (?=\s+[aeioudAEIOU])确保元音空间和元音字符

的正向前瞻

要将所有a替换为an,您可以使用此功能:

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