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

时间:2015-07-03 05:15:53

标签: 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?

感谢。

1 个答案:

答案 0 :(得分:4)

问题是.*贪婪(尽可能匹配)并且它也可以匹配数字,因此匹配(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)

此外,始终使用带有正则表达式的原始字符串。