从货币符号和格式i中提取数字

2024-05-19 11:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我首先想到的是正则表达式。但我写不出来。 你怎么知道的?在


Tags: inputeurcnyexcepted
2条回答

首先,可以使用regex ([0-9.,]+)提取具有不同十进制区域设置的数字。在

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

可以使用多个regex迭代:

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]。 我敢打赌有一个更方便的正则表达式来实现这一切,但至少它应该对你有用:)

相关问题 更多 >

    热门问题