Regex re.search():(\d+;)只匹配一个数字
我想分析字符串中的值387 KB/s: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,只剩
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)
另外,始终将原始字符串与正则表达式一起使用。它将首先匹配“最小匹配”,您的。*将吃掉前两位数字。。