我改寫(munging)包含以下形式的字符串數據:Python的正則表達式(提取從字符串貨幣價值)
" The little £250,000 brown fox jumped over the lazy dog"
[澄清]
該字符串被轉換爲一個雙五月已經被「清洗」已經和可能只是看起來像這樣:
"£250,000"
我設法破解一起粗功能,即地強迫一個STR像「250,000英鎊」成雙倍。然而,當我用一個像上面那樣的字符串來呈現字符串的貨幣部分時,我正努力寫一個正則表達式。問題是我不知道我會遇到哪種類型的字符串 - 即「清理」的貨幣值(如第二個示例)或「髒」字符串(如第一個示例)。我需要編寫一個函數來處理這兩種類型的字符串,並以double形式返回貨幣字符串。
對於'骯髒'的字符串,有人可以推薦如何模式匹配的貨幣值(預期最低:1英鎊,預計最高£99,999,999)。另外,如果下面的函數有更多的pythonic方法,我想聽一聽Pythonistas的建議。
non_numeric = re.compile(r'[^0-9\.]+')
def string_to_decimal(s):
try:
s= s.decode('ascii')
except:
s = s[1:] # Assumption is that s begings with currency symbol
s = str(s) # Probably superfulous?
s = s.replace(',','')
s = non_numeric.sub('', str(s))
return decimal.Decimal(s)
's = str(s)'在'try'之前會有意義。由於解碼僅適用於字符串,並且索引對整數不起作用,所以您可以假設它是'try/except'之後的字符串。否則,你的程序會在'except'內部拋出異常(不會被捕獲)。 – FakeRainBrigand 2012-01-12 13:11:15