正则表达式Python的含义

正则表达式Python的含义,python,regex,Python,Regex,这个正则表达式的意思是:(\d+).*?-将一组数字分组,然后取后面的任何数字(最多只出现一次,换行除外) 是否有差异:(\d+)和[\d]+?取尽可能多的数字(至少1),然后取尽可能少的字符数(新行除外)。非贪婪限定符(?)没有真正的帮助,除非您的模式的其余部分遵循它,否则它将尽可能少地匹配,在这种情况下,总是0 (\d)+ One or more occurance of digits, .* followed by any characters, ? lazy operator i.e

这个正则表达式的意思是:
(\d+).*?
-将一组数字分组,然后取后面的任何数字(最多只出现一次,换行除外)


是否有差异:
(\d+)和[\d]+

取尽可能多的数字(至少
1
),然后取尽可能少的字符数(新行除外)。非贪婪限定符(
)没有真正的帮助,除非您的模式的其余部分遵循它,否则它将尽可能少地匹配,在这种情况下,总是
0

(\d)+  One or more occurance of digits, 
.* followed by any characters,
? lazy operator i.e. return the minimum match.
>>> 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()
()

group1将至少是一个数字,group0将包含group1和其他字符,但不一定包含


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

有人可以解密此模式吗\d+(?:\。\d*)?第一个是一个组,第二个不是。这是表达式:
(\d+).*(\S*)
,它是否至少匹配任何非白色字符(在一个组中)的一次出现,因此如果我有“5000个球”,则
5000个
将在组1中,而
[空白]球
将在组(2)中?@JamesHallen试试看yourself@JamesHallen你为什么不试试呢?它给出了
('5000','')
*?
匹配空字符串是因为它不是贪婪的,而
\S*
匹配空字符串是因为下一个字符是空格。我很困惑,
*
应该匹配“5000”和“balls”之间的空格,然后不应该匹配
?(\S*)
匹配“balls”?@JamesHallen
*?
将匹配空空间(如果必须的话)——否则整个正则表达式将失败。例如,在
(\d+).*(\S+
中,它必须匹配空格,以便
\S+
能够匹配某些内容。