我有以下字符串: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的东西。有什么想法可以阻止它出现在1中出现的第一个之后?

更新:

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

最佳答案

为什么不这样简单:

.*HUD\-1(.*+)


好的,根据您更新的问题,您需要更加严格。尝试将[^D\-1]更改为(?:HUD\-1)?。就其价值而言,您的货币RegEx松懈,可以输入以下内容:


  001 001 .31412341234123


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

关于java - 正则表达式:如何不匹配几个字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14203439/

10-10 16:48