我正在处理包含以下格式字符串的数据:
" The little £250,000 brown fox jumped over the lazy dog"
[澄清]
要转换为双精度浮点数的字符串可能已经被“清理”过,只是看起来像这样:
"£250,000"
我设法拼凑出一个简单的函数,将像“£250,000”这样的字符串转换为 double 类型。然而,当遇到像上面那个字符串一样的字符串时,我不知道该如何编写正则表达式来解析字符串的货币部分。问题在于我不知道会遇到哪种类型的字符串——即“清洗过”的货币值(如第二个示例)或“脏”字符串(如第一个示例)。我需要编写一个单一的函数来处理这两种类型的字符串,并将货币字符串返回为 double 类型。
对于“脏”字符串,有人能推荐一下如何匹配货币值(期望最小值:£1,期望最大值:£99,999,999)。此外,如果有更 Pythonic 的方法来编写下面的函数,我想听听 Python 程序员们的建议。
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)
try
之前使用s = str(s)
是有意义的。由于解码仅适用于字符串,并且索引不适用于整数,因此您可以假定在try/except
之后它是一个字符串。否则,您的程序将在except
中抛出异常(这将不会被捕获)。 - Brigand