Regex:将货币金额(从各种格式转换为有效的浮动金额)>>

问题描述 投票:0回答:1

我正在研究发票解析器,发现了各种不同的货币格式。与其为每张发票重新实现一个特定的案例,我不希望有一个使用Regex替换的适用于所有案例的通用模式。

示例输入格式

2.578,20
2 354,20
234
234,256.20
234,205
246 548
244'056
26'155.25

12,20
13.33

所需的输出

2578.20
2354.20
234
234256.20
234205
246548
244056
26155.25

12.20
13.33

到目前为止,我的进度

到目前为止,我已经设法创建了几乎可以正常工作的东西/^(\d{0,3})?[\.\ ,']?(\d{0,3})([\.,](\d{0,2}))?/和替换字符串$1$2.$4

但是这会产生输出

2578.20
2354.20
234.
234256.20
234205.
246548.
244056.
26155.25
.
1220.  <---- WRONG
1333.  <---- WRONG

我可以在最后加上一个点,因为它在PHP和其他语言中也适用于floatval()。但是最后两种情况是无效的。我知道它匹配最后的第一个(\d{0,3})模式而不是(\d{0,2})模式。但是我对如何解决这个问题不知所措...

我正在研究发票解析器,发现了各种不同的货币格式。与其为每张发票重新实现一个特定的案例,我不希望有一种适用于所有发票的一般模式...

regex preg-replace currency
1个回答
0
投票

您可以使用[^\d\n](?!\d\d$)

© www.soinside.com 2019 - 2024. All rights reserved.