带有非空替换的re.sub()会在Python中吃掉以下字符

带有非空替换的re.sub()会在Python中吃掉以下字符,python,regex,character,outlook-addin,regex-lookarounds,Python,Regex,Character,Outlook Addin,Regex Lookarounds,我试图通过插入一组非字母的字符来分隔两个相邻元音的单词。当我将re.sub()与非空替换一起使用时,结果显示插入,但插入似乎“吃掉”了以下字符 这里有一个例子“ import=re word=“主动脉” re.sub(“(?您应该使用(一种仅检查某些字符是否存在而不实际将其添加到匹配值中的非消耗模式),而不是一个非捕获组(一种将匹配字符放入匹配值并替换为re.sub)的消耗模式) 使用 看 注意:如果希望获得'a[=]或[=]ta',请将r添加到lookback字符类中,[AEOUaeouy]=

我试图通过插入一组非字母的字符来分隔两个相邻元音的单词。当我将
re.sub()
与非空替换一起使用时,结果显示插入,但插入似乎“吃掉”了以下字符

这里有一个例子“

import=re
word=“主动脉”
re.sub(“(?您应该使用(一种仅检查某些字符是否存在而不实际将其添加到匹配值中的非消耗模式),而不是一个非捕获组(一种将匹配字符放入匹配值并替换为
re.sub
)的消耗模式)

使用

注意:如果希望获得
'a[=]或[=]ta'
,请将
r
添加到lookback字符类中,
[AEOUaeouy]
=>
[aeouaeyer]

详细信息

  • ([AEOUaeouy])
    -第1组:模式中定义的任何一个字符
  • (?=[aeoui])
    -字符类中紧跟字符的位置
  • \1
    -在替换模式中,插入组1捕获的值

你想要的是一个前瞻,而不是一个非捕获组-
(?:[aeoui])
(?=[aeoui])
。顺便问一下,为什么
a[=]或[=]ta
是预期的?天哪,你说得对!谢谢!如果你用这个作为回应,我会接受。我想你预期的结果是
a[=]orta
,对吧?
[AEOUY]不包含
r
import = re

word = "aorta"

re.sub('(?<=[AEOUaeouy])(?:[aeoui])', '[=]', word)
#actual output => 'a[=]r[=]ta'
#expected output => 'a[=]or[=]ta'
import re
word = "aorta"
print(re.sub('([AEOUaeouy])(?=[aeoui])', r'\1[=]', word))
# => a[=]orta