我想从字符串中解析值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?
感谢。
答案 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)
此外,始终使用带有正则表达式的原始字符串。