首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多个匹配的Regex不工作。

具有多个匹配的Regex不工作。
EN

Stack Overflow用户
提问于 2018-02-27 15:03:11
回答 2查看 140关注 0票数 0

我有以下命令:

代码语言:javascript
运行
复制
((?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的火柴销售额。

有没有人想过,在这种情况下,如何使用积极的或消极的眼光来解决这两个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-27 15:52:28

下面的regex101使用展望来确保数字包含至少两个,或两个.

代码语言:javascript
运行
复制
((?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代码

代码语言:javascript
运行
复制
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 ) );
}
票数 1
EN

Stack Overflow用户

发布于 2018-02-27 15:56:01

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49011763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档