Java 具有多个匹配项的正则表达式不起作用

Java 具有多个匹配项的正则表达式不起作用,java,regex,Java,Regex,我有以下正则表达式: ((?i:EUR)( ?)(([0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?)|([0-9]{1,3}(\.[0-9]{3})*(,[0-9]+)?)|((\d+)((\.|,)\d+)?))( ?)(?i:Mio|Million|Billion)?) 我想用正则表达式搜索所有类型的数字。在英语中,数字可以包含带“,”的千个分隔符,在德语中可以包含带“.”。也可以使用十进制数字(英语:“,”德语:“,”) 到目前为止,我的正则表达式有效。只有一个问题。

我有以下正则表达式:

((?i:EUR)( ?)(([0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?)|([0-9]{1,3}(\.[0-9]{3})*(,[0-9]+)?)|((\d+)((\.|,)\d+)?))( ?)(?i:Mio|Million|Billion)?)
我想用正则表达式搜索所有类型的数字。在英语中,数字可以包含带“,”的千个分隔符,在德语中可以包含带“.”。也可以使用十进制数字(英语:“,”德语:“,”)

到目前为止,我的正则表达式有效。只有一个问题。例如:

该公司2016年的销售额为1.000.000,5欧元

比赛是:

该公司在2016年的销售额为0.000,5美元

问题是正则表达式的第一部分
([0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)
已经匹配,尽管第二部分
([0-9]{1,3}(\.[0-9]{3})*(,[0-9]+)
包含更好的解决方案

目前,我正试图在正则表达式的第一部分之后,通过一个积极的前瞻来解决这个问题,比如:
([0-9]{1,3})([0-9]{3})*(\.[0-9]+)(^.([0-9]=[0-9])

总的来说:
((?i:EUR)(?)(([0-9]{1,3})([0-9]{3})*(\.[0-9]+)(^.(?=[0-9]))([0-9]{1,3}(\.[0-9]{3})*(,[0-9]+)(\d+(\.\d+)(\.\1240+)(\.\1240,),)(<1240亿欧元)

但是

该公司2016年的销售额为1000000.5欧元

具有以下匹配项:

该公司在2016年的销售额为1000.5匹

有人知道如何在这种情况下使用积极或消极的前瞻,以便解决这两个问题吗?

下面使用前瞻来确保数字至少包含两个
或两个

((?i:EUR)\s?
  (?:
    (?=(\d*,){2})[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?
  |
    (?=(\d*\.){2})[0-9]{1,3}(\.[0-9]{3})*(,[0-9]+)?
  |
    \d+(?:[.,]\d+)?
  )
\s?(?i:Mio|Million|Billion)?)
java代码

String in = "the company generated sales of EUR 1.000.000,5 in 2016";
Pattern p = Pattern.compile(
    "((?i:EUR)\\s?(?:(?=(\\d*,){2})\\d{1,3}(,\\d{3})*(\\.\\d+)?|(?=(\\d*\\.){2})\\d{1,3}(\\.\\d{3})*(,\\d+)?|\\d+(?:[.,]\\d+)?)\\s?(?i:Mio|Million|Billion)?)" );
Matcher m = p.matcher( in );
while ( m.find() ) {
    System.out.println( m.group( 1 ) );
}

也许:
^([0-9]{0,3}((\,|\)[0-9]{3})*((\,|\)[0-9]*){0,1}

数字能有多大?@code.IT:我不确定。实际上最大的数字大约是1.000.000.000。。大小重要吗?regex101不是Java语法,我认为它工作得很好!正是我想要的:-)花费了我将近3个小时。非常感谢你!在java
[0-9[0-9]1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{1,3{3{3{3{3}代码>同时也要处理数字,同时要处理数字,只有一个<一个
<一个数字,而且处理数字,
<一个<代码>
<一个<代码><代码><代码><代码><代码><代码><代码><代码><代码><代码>,,,,,,,,,,<0-0-0-0 0,\\d)
尽管此regexp可能具有请求的行为,但最好还是提供一些解释。我刚才回答了大家的提问。我认为我无法解释整个正则表达式的概念和功能,比如:postivie、false、negative、look back、around等等。。。。最好的方法是:买一本书或在网上搜索培训。因为你的回答是“也许”,你应该指出你与他们(提问者)最初尝试的相比所发生的变化。否则,这只是一个“盲目猜测的答案”,这是令人不快的。当然,你不必解释基础知识,除了那些与他们在尝试中错过的东西直接相关的知识。顺致敬意,