说我有
“一个杂技演员跳过一座桥”我希望将其更改为
“一个杂技演员跳过一座桥”。现在,我正在使用
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 :(得分: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'