替换Python空匹配项

替换Python空匹配项,python,regex,Python,Regex,我真的不理解在上发现的以下示例: >p=re.compile('x*') >p.sub('-','abxd') '-a-b-d-' 为什么正则表达式“x*”匹配了四次 我认为输出应该是:“ab-”*元字符匹配0次或更多次。所以 a bx d ^ ^ -- ^ ^是x*匹配0次的位置,--是x*匹配1次的位置。这就是为什么输出是-a-b-d- 要获得输出ab-d,需要在正则表达式中使用x+。这意味着匹配一次或多次。因此,它将只匹配以下位置 abxd ^ 自Python 3.7以来关于re.sub

我真的不理解在上发现的以下示例:

>p=re.compile('x*')

>p.sub('-','abxd')

'-a-b-d-'

为什么正则表达式“x*”匹配了四次


我认为输出应该是:“ab-”

*
元字符匹配0次或更多次。所以

a bx d
^ ^ -- ^
^
x*
匹配0次的位置,
--
x*
匹配1次的位置。这就是为什么输出是
-a-b-d-

要获得输出
ab-d
,需要在正则表达式中使用
x+
。这意味着匹配一次或多次。因此,它将只匹配以下位置

abxd
^

自Python 3.7以来关于re.sub的一次更新

当与前一个非空匹配相邻时,将替换模式的空匹配


结果变成“-a-b--d-”,因为“d”现在有一个空匹配项。在python的早期版本中,不允许使用此空匹配,因为它与“x”的匹配相邻。

谢谢@thefourtheye的回答。另一个问题:在“abxd”中,“a”是第一个字符,“d”是最后一个字符,那么在第一个位置之前(在“a”之前)和最后一个位置之后(在“d”之后)怎么可能出现空匹配?@Geekluca认为空字符串在所有字符串之前和之后:-)