Python 用新的正则表达式替换正则表达式
说我有 “一个杂技演员跳过一座桥” 我想把这个改成 “一个杂技演员跳过了一座桥” 现在,我正在使用Python 用新的正则表达式替换正则表达式,python,regex,Python,Regex,说我有 “一个杂技演员跳过一座桥” 我想把这个改成 “一个杂技演员跳过了一座桥” 现在,我正在使用 歌词=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]+),歌词) 结果字符串并没有像预期的那样以我希望的方式替换。我还能怎么做 为了澄清这一点,我希望能够将其推广到每种情况,而不仅仅是我上面使用的示例。根据英语语法,an位于以元音开头的单词之前。为此,您可以
歌词=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]+),歌词)
结果字符串并没有像预期的那样以我希望的方式替换。我还能怎么做
为了澄清这一点,我希望能够将其推广到每种情况,而不仅仅是我上面使用的示例。根据英语语法,
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'
>>>
>>> re.sub(r'\ba\b', 'an', "a bridge")
'an bridge'
请注意,a
之前的acorbat
已更改为a
,而桥牌之前的a
未更改。而且elephant
之前的a
已更改为an
,因此上述正则表达式是通用的,适用于所有单词
我们在这里使用:'\ba\b(?=\s+[aeiouAEIOU])”
\ba\b
尝试将文字a
与两侧的单词边界匹配
(?=\s+[aeioudAEIOU])
确保对元音空间和元音字符进行正向前瞻
要将所有a
替换为a
,可以使用以下方法:
>>> 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'
>>>
>>> re.sub(r'\ba\b', 'an', "a bridge")
'an bridge'
你能补充一些关于你的正则表达式应该替换什么的细节吗?现在听起来好像你想把“a”变成“an”,把“an”变成“a”,但我从你当前正则表达式的外观上猜测,你正在尝试做更多的事情?第二个参数
re.sub
getstring
,而不是regexp
。你不能用re.sub
@alexanderbird道歉来代替它。。我用错了正则表达式你说的“每种情况”是什么意思?你不是要求对所有的英语语法规则进行语法检查,是吗?或者你是指任何使用“an”或“a”不正确的句子吗?请注意,a/an规则是基于字母的发音,而不是字母本身,例如,如果一个人使用“Xtension”作为适当的名称/品牌名称/某物,你的“anxtension”将是适当的文本。这很好,但我如何使正则表达式可推广?让它为每一个字工作combinations@dbalagula23上面的答案是广义的,它适用于所有的单词组合,请参见大象
示例啊,我现在明白了。谢谢,英语比这更微妙;a/a规则是语音的,而不是字母的。例如“一个有用的例子”;“医院”(并非用所有英语方言);英语比这更微妙;a/a规则是语音的,而不是字母的。例如“一个有用的例子”;“一小时”;“欧洲人”;“一张X光片”。@rici你是对的,我已经发布了答案和规则,以澄清行动计划的意图