正则表达式:如何不匹配几个字母

时间:2013-01-07 20:21:35

标签: java regex

我有以下字符串: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之后的值是金额。其余的正则表达式试图确定可以写出金额的所有不同方式

2 个答案:

答案 0 :(得分:1)

为什么不能像以下那样简单:

.*HUD\-1(.*+)

好的,我需要根据您更新的问题进行更严格的限制。尝试将[^D\-1]更改为(?:HUD\-1)?。对于它的价值,您的货币RegEx变化不大,允许输入如下:

  

001 001 .31412341234123

您可能会认为重新发明轮子,我相信您可以通过Google快速找到货币RegEx。否则,我还建议将RegEx锚定在$的末尾。

答案 1 :(得分:0)

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

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