Regex re.search():(\d+;)只匹配一个数字

Regex re.search():(\d+;)只匹配一个数字,regex,Regex,我想分析字符串中的值387 KB/s: str1 = '2015-07-02 02:05:02 (387 KB/s)' 我为其编写的正则表达式如下: mbps = re.search('\d+-\d+-\d+ \d+:\d+:\d+ .*(\d+) (.*/s)',str1) var = mbps.group(1) 打印var只会给我7而不是387,即它只匹配一个数字 请建议如何获取完整的号码,即387? 谢谢。问题在于,*是贪婪的(尽可能匹配),而且它也可以匹配数字,因此它匹配(38,只剩

我想分析字符串中的值387 KB/s:

str1 = '2015-07-02 02:05:02 (387 KB/s)'
我为其编写的正则表达式如下:

mbps = re.search('\d+-\d+-\d+ \d+:\d+:\d+ .*(\d+) (.*/s)',str1)
var = mbps.group(1)
打印
var
只会给我
7
而不是
387
,即它只匹配一个数字

请建议如何获取完整的号码,即
387?


谢谢。

问题在于,
*
是贪婪的(尽可能匹配),而且它也可以匹配数字,因此它匹配
(38
,只剩下
7
用于
\d+
(因为它已成功匹配,所以没有理由扩展其匹配)

一种可能的解决方案是使量词变懒:

mbps = re.search(r'\d+-\d+-\d+ \d+:\d+:\d+ .*?(\d+) (.*/s)',str1)
更好的解决方案应该更具体,例如不允许使用数字:

mbps = re.search(r'\d+-\d+-\d+ \d+:\d+:\d+ [^\d]*(\d+) (.*/s)',str1)

另外,始终将原始字符串与正则表达式一起使用。

它将首先匹配“最小匹配”,您的。*将吃掉前两位数字。。