我试图通过插入非字母字符组来将单词与两个相邻的元音分开。当我使用re.sub()
非空替换时,结果显示插入但插入似乎已经消耗了#34;以下字符。
这是一个例子"
import = re
word = "aorta"
re.sub('(?<=[AEOUaeouy])(?:[aeoui])', '[=]', word)
#actual output => 'a[=]r[=]ta'
#expected output => 'a[=]or[=]ta'
为什么插入后的角色吃掉了?
答案 0 :(得分:2)
你应该使用positive lookahead(一种非消费模式,只检查是否存在某些字符,而不是实际将它们添加到匹配值中),而不是非捕获组(一种消费模式,将匹配的字符匹配到由re.sub
替换的匹配值。
使用
import re
word = "aorta"
print(re.sub('([AEOUaeouy])(?=[aeoui])', r'\1[=]', word))
# => a[=]orta
请参阅Python demo。
注意:如果您希望获得'a[=]or[=]ta'
,请将r
添加到lookbehind角色类,[AEOUaeouy]
=&gt; [AEOUaeouyr]
。
<强>详情
([AEOUaeouy])
- 第1组:模式中定义的任何一个字符(?=[aeoui])
- 在字符类\1
- 在替换模式中,插入使用组1捕获的值。