Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用新的正则表达式替换正则表达式_Python_Regex - Fatal编程技术网

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
get
string
,而不是
regexp
。你不能用
re.sub
@alexanderbird道歉来代替它。。我用错了正则表达式你说的“每种情况”是什么意思?你不是要求对所有的英语语法规则进行语法检查,是吗?或者你是指任何使用“an”或“a”不正确的句子吗?请注意,a/an规则是基于字母的发音,而不是字母本身,例如,如果一个人使用“Xtension”作为适当的名称/品牌名称/某物,你的“anxtension”将是适当的文本。这很好,但我如何使正则表达式可推广?让它为每一个字工作combinations@dbalagula23上面的答案是广义的,它适用于所有的单词组合,请参见
大象
示例啊,我现在明白了。谢谢,英语比这更微妙;a/a规则是语音的,而不是字母的。例如“一个有用的例子”;“医院”(并非用所有英语方言);英语比这更微妙;a/a规则是语音的,而不是字母的。例如“一个有用的例子”;“一小时”;“欧洲人”;“一张X光片”。@rici你是对的,我已经发布了答案和规则,以澄清行动计划的意图