Python正则表达式,以匹配货币(带或不带逗号或小数)

2024-10-01 09:23:37 发布

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

如何编写可以1.匹配货币的正则表达式,它可能包含也可能不包含逗号或十进制,并且2.只与货币代码匹配。我看到的大多是匹配的货币符号。 我希望能够匹配货币['300,000.00']和货币代码['USD']从这样一个完整的文本中:

Userid 9XXXX219 sales USD300,000.00 On 01-JUL-2016 08:34:32

我尝试过用小数点来匹配小数点,但我没有尝试过用小数点来匹配小数点:

s = 'USD1 USD1.00 USD100.00 USD1,000 CAD1,000.00'
re.findall(r'\d+\.\d+', s)
#matches
['1.00', '100.00', '000.00']

#should not match any other thing e.g. 1XXXX324

#instead of this:
['1','1.00', '100.00', '1,000', '1,000.00']

以及如何编写另一个regex模式来只匹配货币代码?i、 e

^{pr2}$

Tags: 代码文本reon货币符号julusd
3条回答

'\d+([.,]?\d*)*'应该匹配所有大小写。 如果你愿意,你也可以增加空间。像这样:

'\d+([., ]?\d*)*' 

对于货币代码:'[A-Z]{3}'应该可以。在

根据SilentMonk对非捕获组的建议:

^{pr2}$

获取货币:

列出一份详尽的有效货币清单可能不可行,但如果货币数量有限,则可以这样做:

re.findall('USD|CAD','USD1 USD1.00 USD100.00 USD1,000 CAD1,000.00 123XXX123')

输出:

['USD', 'USD', 'USD', 'USD', 'CAD']

获取金额:

使用capturing group,re.findall返回元组中的每个捕获。使用非捕获组(?:)将解决此问题。在

^{pr2}$

输出:

['300,000.00']

带有示例文本的插图:

re.findall('(?<=USD|CAD)\d{1,3}(?:,\d{3})*(?:\.\d+)?(?=\s)','USD1 USD1.00 USD100.00 USD1,000 CAD1,000.00 123XXX123')

输出:

['1', '1.00', '100.00', '1,000', '1,000.00']

阅读更多here

(?=)-积极展望 (?<=)-积极回望

要只匹配货币,您可以使用:(\d[0-9,.]+)

为了匹配货币代码,您可以使用:([A-Z]+)

Demo and Explaination

相关问题 更多 >