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

use*_*942 4 regex

我想从字符串中解析值 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?

谢谢。

Tim*_*ker 5

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

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