雷格斯:怎么不匹配几个字母



我有以下字符串: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]对许多1的"吃"。有什么想法可以阻止它在HUD-1中出现的第一个之后"吃掉"1的吗?

更新:

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

为什么不做一些简单的事情:

.*HUD-1(.*+)

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

001 001。31412341231123

你可能会考虑而不是在那里重新发明轮子,我相信你可以通过谷歌快速找到货币RegEx。否则,我还建议在RegEx的末尾锚定一个$

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

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

最新更新