0

这个正则表达式的含义是:(\d+).*?- 对一组数字进行分组,然后取后面的任何内容(最多只出现一次,除了换行符)?

有区别吗:(\d+) and [\d]+

4

3 回答 3

2

尽可能多的数字(至少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()
()
于 2013-05-29T13:07:44.673 回答
0
(\d)+  One or more occurance of digits, 
.* followed by any characters,
? lazy operator i.e. return the minimum match.
于 2013-05-29T13:07:40.743 回答
0

group1 将至少是一个数字, group0 将包含 group1 并且可能包含其他字符,但不一定。

编辑以回答已编辑的问题:AFAIK 除了分组之外,这两个之间的匹配应该没有区别。

于 2013-05-29T13:08:36.903 回答