这个正则表达式的含义是:(\d+).*?
- 对一组数字进行分组,然后取后面的任何内容(最多只出现一次,除了换行符)?
有区别吗:(\d+) and [\d]+
?
尽可能多的数字(至少1
),然后尽可能少的字符(换行除外)。非贪婪限定符 ( ?
) 并没有真正的帮助,除非你的模式的其余部分跟随它,否则它只会尽可能少地匹配,在这种情况下,总是0
。
>>> import re
>>> re.match(r'(\d+).*?', '123').group()
'123'
>>> re.match(r'(\d+).*?', '123abc').group()
'123'
(\d+)
和之间的区别在于[\d]+
前者组和后者没有。([\d]+)
然而将是等价的。
>>> re.match(r'(\d+)', '123abc').groups()
('123',)
>>> re.match(r'[\d]+', '123abc').groups()
()
(\d)+ One or more occurance of digits,
.* followed by any characters,
? lazy operator i.e. return the minimum match.
group1 将至少是一个数字, group0 将包含 group1 并且可能包含其他字符,但不一定。
编辑以回答已编辑的问题:AFAIK 除了分组之外,这两个之间的匹配应该没有区别。