我有以下命令:
((?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年创造了sales .000,5的销售额
问题是正则表达式([0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?)
的第一部分已经匹配,尽管第二部分([0-9]{1,3}(\.[0-9]{3})*(,[0-9]+)?)
包含了更好的解决方案。
目前,我正试图在正则表达式的第一部分(如:(^\.(?=[0-9]))
)之后,借助一个积极的前瞻性([0-9]{1,3}(,[0-9]{3})*(\.[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+)?))( ?)(?:Mio|Million|Billion)?)
但比
该公司2016年的销售额为1,000,000.5欧元。
有以下匹配:
该公司在2016年创造了000.5的火柴销售额。
有没有人想过,在这种情况下,如何使用积极的或消极的眼光来解决这两个问题?
发布于 2018-02-27 15:52:28
下面的regex101使用展望来确保数字包含至少两个,
或两个.
((?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 ) );
}
发布于 2018-02-27 15:56:01
也许:^([0-9]{0,3}((\,|\.)[0-9]{3})*)((\,|\.)[0-9]*){0,1}
https://stackoverflow.com/questions/49011763
复制相似问题