我试图理解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"
答案 0 :(得分:1)
问自己一个问题,a
和b
之间有多少空匹配。无限的数字。但是,一旦空格被-
替换,就没有更多的匹配。
答案 1 :(得分:1)
*
是元字符,表示匹配0次或更多次。所以,在这种情况下,
a
之前找到0 x
b
之前找到0 x
d
之前找到1 x
x
之后找到0 d
。这就是为什么它用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'