正则表达式中的空匹配

时间:2014-08-06 05:28:28

标签: python regex

我试图理解Python doc中的一些简单代码

>>> p = re.compile('x*')
>>> p.sub('-', 'abxd')
'-a-b-d-'

在他们说的文档中:"空匹配仅在它们与前一个匹配不相邻时才被替换。" 但我无法理解为什么结果不是' ab-d'

感谢

编辑 - 这是我阅读的文档的链接:" https://docs.python.org/2/howto/regex.html#search-and-replace"

4 个答案:

答案 0 :(得分:1)

问自己一个问题,ab之间有多少空匹配。无限的数字。但是,一旦空格被-替换,就没有更多的匹配。

答案 1 :(得分:1)

*是元字符,表示匹配0次或更多次。所以,在这种情况下,

  1. a之前找到0 x
  2. b之前找到0 x
  3. d之前找到1 x
  4. 最后在x之后找到0 d
  5. 这就是为什么它用x替换-(包括零出现)的所有出现。

    如果您希望将结果设为ab-d,请使用+元字符,这意味着匹配1次或更多次。因此,它只会在x之前找到d,它只会替换它。

答案 2 :(得分:0)

使用x+代替x*

>>> import re
>>> p = re.compile('x*')
>>> p.sub('-', 'abxd')
'-a-b-d-'
>>> p = re.compile('x+')
>>> p.sub('-', 'abxd')
'ab-d'
>>> 

注意:*将匹配0个或更多字符,+将匹配1或匹配。

答案 3 :(得分:0)

如果输入中只有一个x,那么在模式中+之后就不需要x

>>> re.sub(r'x', r'-', 'abxd')
'ab-d'