2013-07-26 19 views

回答

3

最簡單的方法只會是這樣的:

re.compile('([\d,.]+)') 

但是,這將允許像...輸入。這可能是可以接受的,因爲你的原始模式允許,,,。不過,如果你希望只允許一個小數點,你可以這樣做:

re.compile('([\d,]+.?\d*)') 

注意,這將不會允許像.5 —輸入你需要使用0.5代替。

+0

如果我做了什麼're.compile(「([\ d ,] *?\ d *)「)'? –

+0

@JamesHallen這也允許一個空字符串。 –

2

我覺得完美的正則表達式將是

re.compile(r'\d{1,2}[,.]\d{1,3}') 

這樣你匹配一個或兩個數字後跟一個逗號或句號,然後一到三個數字。

如果您以後不打算使用匹配的內容,則不需要括號。省略它們加快了這個過程。

1

這是一個非常大的,但強大的正則表達式來捕獲任何這是一個有效的數字:

import re 
string = """ 
5,000 
2.5 
25 
234,456,678.345 
... 
,,, 
23,332.1 
abc 
45,2 
0.5 
""" 
print re.findall("(?:\d+(?:,?\d{3})*)+\.?(?:\d+)?", string) 

輸出:

# Note that it will not capture "45,2" because it is invalid 
# It instead does "45" and "2", which are each valid 
['5,000', '2.5', '25', '234,456,678.345', '23,332.1', '45', '2', '0.5']