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亿欧元)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等等。。。。最好的方法是:买一本书或在网上搜索培训。因为你的回答是“也许”,你应该指出你与他们(提问者)最初尝试的相比所发生的变化。否则,这只是一个“盲目猜测的答案”,这是令人不快的。当然,你不必解释基础知识,除了那些与他们在尝试中错过的东西直接相关的知识。顺致敬意,