2017-09-15 176 views
3

我期待從一串刮取的數據中提取價格。正則表達式提取價格

我使用這個此刻:

re.findall(r'£(?:\d+\.)?\d+.\d+', '£1.01') 
['1.01'] 

其中一期工程的時間細99%。但是,我偶爾會看到:

re.findall(r'£(?:\d+\.)?\d+.\d+', '£1,444.01') 
['1,444'] 

我希望看到['1444.01']理想狀態。

這是我從中提取價格的字符串示例。

'\n    £1,000.73    \n\n\n    + £1.26\nUK delivery\n\n\n' 

一些幫助放在一起的正則表達式從上面的字符串得到['1000.73', '1.26']

回答

3

您可以抓住所有的值與'£(\d[\d.,]*)\b',然後刪除所有逗號與後我

import re 
s = '\n    £1,000.73    \n\n\n    + £1.26\nUK delivery\n\n\n' 
r = re.compile(r'£(\d[\d.,]*)\b') 
print([x.replace(',', '') for x in re.findall(r, s)]) 
# => ['1000.73', '1.26'] 

請參閱Python demo

£(\d[\d.,]*)\b模式找到£然後捕獲一個數字然後儘可能多地使用任何0+數字/ ,/.,但會回溯到字邊界所在的位置。

+0

好的解決方案 - 我會放棄這一點。謝謝Wiktor –