我改写(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