Python Regex:格式化逗号的使用,国际时期

时间:2013-07-03 16:07:57

标签: python regex

我将货币存储在十进制中。从客户端,我可以接收以下格式的字符串:

US$1,000.00
€1.000,00

到目前为止,我写过:

re.sub(r'[^\d\.]', '', 'US$1,000.00')

对于第一个示例将返回1000.00(格式化我想要的格式),对于第二个示例将返回1.000(我不这样做)。

正确捕获两位小数的最佳方法是什么?

5 个答案:

答案 0 :(得分:2)

您可以尝试拆分然后再粘合在一起

import re;
z = re.split("[,.]", re.sub([^\d\.\,], '', "$1,000.00"))
''.join(z[0:-2]) + ".".join(z[-2:])  # '1000.00'

答案 1 :(得分:1)

您需要为每种货币设置不同的表达式。有很多不同的货币规则,如果你试图通过一个正则表达式处理它们,你将处于一个受伤的世界。也许正则表达式是正确的解决方案,也许不是。

无论如何,这样的事情就可以了:

money = "US$1,000.00"
decimal_rep = Decimal(0)

if money.startswith("US$"):
    decimal_rep = Decimal(re.sub(r'[^\d\.]', '', money))
elif money.startswith("€"):
    ...

答案 2 :(得分:0)

# -*- coding: cp1252 -*-
import re

text = '''US$1,000.00
US$3,000,000
€1.000,00
€4.000'''
print '%s\n-------------------' % text

pat = '([$€])[ \t]*[\d,.]+'

def ripl(mat, d = dict(('$,','€.'))):
    return mat.group().replace(d[mat.group(1)],'')

print re.sub(pat,ripl,text)

答案 3 :(得分:0)

我同意约旦:如果有更多可能的货币格式,那么这不是可行的方法。

但是,如果您知道,您将只拥有这两种格式,则可以删除所有非数字字符,除了句点和逗号后面只有数字:

output = re.sub(r'(?![.,]\d+$)\D', '', input)

答案 4 :(得分:0)

我发现了一个模块,它可以解决很多货币格式的复杂性(特别是关于句号,逗号和更多东西)。该包名为Babel,这里是指向可能有用的特定方法的链接:http://babel.edgewall.org/wiki/ApiDocs/babel.numbers#babel.numbers:parse_decimal

文档: http://babel.edgewall.org/wiki/ApiDocs/babel.numbers

其中有很多其他有用的国际化工具。