2

我有以下字符串:SEE ATTACHED ADDENDUM TO HUD-1194,520.07

在那个字符串里面是HUD-1,之后是194,520.07。我想要的是那个194,520.07部分。

我编写了以下正则表达式来提取该值:

[^D\-1](?:-|\()?\$?(?:\d{1,3}[ ,]?)*(?:\.\d+)\)?

然而,这拉出来:94,520.07

我知道这与这部分有关:[^D\-1]对许多人来说“吃” 11在出现第一个之后,我有什么想法可以阻止它“吃”HUD-1吗?

更新:

所有其他东西的原因是,如果 HUD-1 之后的值是金额,我也只想匹配。该正则表达式的其余部分试图确定可以写入金额的所有不同方式

4

2 回答 2

1

为什么不这么简单:

.*HUD\-1(.*+)

好的,根据您更新的问题,您需要更加严格。尝试更改[^D\-1]为 just (?:HUD\-1)?。就其价值而言,您的货币 RegEx 是宽松的,允许输入如下:

001 001 .31412341234123

您可能会考虑不在那里重新发明轮子,我相信您可以通过 Google 快速找到货币 RegEx。否则,我还建议您在 RegEx$的末尾加上 a 。

于 2013-01-07T20:24:51.547 回答
0

此更改将使正则表达式的第二个匹配组包含您想要的完整数字(第一个 1 之后的所有内容),并将可能的 HUD-1 放在单独的匹配组中(如果存在)。

(HUD-1)?((?:-|\()?\$?(?:\d{1,3}[ ,]?)*(?:\.\d+)\)?) 
于 2013-01-07T20:36:52.710 回答