2015-07-03 51 views
2

我想從串387 KB/s的解析值:re.search():( d +)僅匹配單個數字

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?

感謝。

+2

它將首先匹配'最小匹配',您的*會吃掉前兩個數字。 – NikhilWanpal

回答

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) 

此外,始終使用正則表達式原始字符串。