2016-04-22 59 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