从货币符号中提取数字并将其格式化

时间:2018-08-09 09:41:29

标签: python regex currency

+---------+---------+------------+-----------+
| Input             |    Excepted            |
+---------+---------+------------+-----------+
| EUR 1.409,00      |    1409                |
| $ 409,05          |    409.05              |
| ¥409.50          |    409.5               |
| CNY 1,000         |    1000                |
+---------+---------+------------+-----------+

我想到的第一个想法是正则表达式。我不能写。 您如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以使用多个正则表达式迭代:

import re

results = []

# Get list of numbers
numbers = re.findall('[\d,.]+', 'EUR 1.409,00 $ 409,05 ¥409.50 CNY 1,000.00')

# Parse number
for number in numbers:
    dp = ''
    ip = number
    match = re.search('(?<=[,.])(?:\d{2})$', number)
    # Get decimal places
    if match:
        dp = match.group()
        # Extract integer places
        ip = number[:match.start()]
    # Remove commas and periods from integer
    ip = ip.translate(None, ',.')
    # Parse float
    results.append(float('{}.{}'.format(ip, dp)))
print(results)

结果为[1409.0, 409.05, 409.5, 1000.0]。 我敢打赌,有一种更方便的正则表达式可以一并完成,但至少它应该对您有用:)

答案 1 :(得分:0)

要开始使用,可以使用正则表达式([0-9.,]+)提取具有不同十进制语言环境的数字。

然后,您可能希望遵循Tim Biegeleisen的建议,并使用语言环境库将它们转换为数字。