Python空匹配被替换

时间:2014-05-07 05:03:04

标签: python regex

我真的不理解docs.python.org上的以下示例:

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

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

'-a-b-d-'

为什么正则表达式'x*'匹配四次?

我认为输出应该是:' ab - '

2 个答案:

答案 0 :(得分:3)

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

 a bx d
^ ^ -- ^

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

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

abxd
  ^

答案 1 :(得分:0)

自Python 3.7以来,有关re.sub的一个更新。

  

与先前的非空匹配项相邻时,将替换该模式的空匹配项。

结果变为“ -a-b--d-”,因为该“ d”现在具有空匹配项。在先前的python版本中,不允许该空匹配,因为它与“ x”的匹配相邻。