更换正则表达式说我有新的正则表达式
“一个杂技演员跃过的桥梁”
,我想改变这
“的杂技演员在桥上跳下”。
现在,我使用
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