带有非空替换的re.sub()会在Python中跟随字符

时间:2017-09-22 07:37:41

标签: python regex character outlook-addin regex-lookarounds

我试图通过插入非字母字符组来将单词与两个相邻的元音分开。当我使用re.sub()非空替换时,结果显示插入但插入似乎已经消耗了#34;以下字符。

这是一个例子"

import = re

word = "aorta"

re.sub('(?<=[AEOUaeouy])(?:[aeoui])', '[=]', word)
#actual output => 'a[=]r[=]ta'
#expected output => 'a[=]or[=]ta'

为什么插入后的角色吃掉了?

1 个答案:

答案 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捕获的值。