我想从字符串中解析值 387 KB/s:
str1 = '2015-07-02 02:05:02 (387 KB/s)'
Run Code Online (Sandbox Code Playgroud)
我为它写的正则表达式是这样的:
mbps = re.search('\d+-\d+-\d+ \d+:\d+:\d+ .*(\d+) (.*/s)',str1)
var = mbps.group(1)
Run Code Online (Sandbox Code Playgroud)
打印var只给我7而不是387ie 它只匹配一个数字。
请建议我如何获得完整的数字,即 387?
谢谢。
问题是它.*是贪婪的(尽可能多地匹配)并且它也可以匹配数字,所以它匹配(38,只剩下7the \d+(因为它已经成功匹配,所以没有理由扩展它的匹配)。
一种可能的解决方案是使量词惰性:
mbps = re.search(r'\d+-\d+-\d+ \d+:\d+:\d+ .*?(\d+) (.*/s)',str1)
Run Code Online (Sandbox Code Playgroud)
更好的解决方案会更具体,例如禁止数字:
mbps = re.search(r'\d+-\d+-\d+ \d+:\d+:\d+ [^\d]*(\d+) (.*/s)',str1)
Run Code Online (Sandbox Code Playgroud)
此外,始终使用带有正则表达式的原始字符串。