首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区分千个分离数与不区分千个分离数的准则

区分千个分离数与不区分千个分离数的准则
EN

Stack Overflow用户
提问于 2019-05-13 07:36:32
回答 1查看 76关注 0票数 3

我需要在给定的文本行中提取价格信息。到目前为止,我在java中成功地使用了下面的regex (\\d{1,3}(,\\d{3})*(\\.\\d+)?)price will be 90,500 USD这样的行。

但是,现在,在价格开始(eg: for order number 12345 the price will be 100,500 USD)之前,我也有了另一个号码的行。在这种情况下,我的价格提取失败。例如,上面给出的结果是123

我可以有一个regex/另一种方法只提取价格信息,而不管是否存在其他数字?(无论小数点与否,价格总是以千为单位)

下面是我现在使用的用于这项工作的完整代码:

代码语言:javascript
复制
private String getPrice(String fileText) {
    String lines[] = fileText.split(System.lineSeparator());

    for (String line : lines) {
        Pattern p = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+))");
        Matcher m = p.matcher(line);
        if (m.find()) {
            return m.group(0);
        }

        p = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+)?)");
        m = p.matcher(line);
        if (m.find()) {
            return m.group(0);
        }   
    }       
    return "";
}

我希望这场比赛是在文字级别。(eg: 123 of 12345 should not match.)我的单词分隔符仅为space123-456被认为是一个单词。所以123456123-456123,456123,456.56A123456只有123,456123,456.56应该匹配。问题是我当前的代码提取了123 of 123456123-456A123456

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 08:35:40

您的正则表达式与任何上下文中的数字匹配,小数部分是必需的。

我建议:

  • 只有当数字不以字括起来时,才能匹配它
  • 使用一个可选的非捕获组围绕分形数部分模式。

使用

代码语言:javascript
复制
Pattern p = Pattern.compile("\\b\\d{1,3}(?:,\\d{3})*(?:\\.\\d+)?\\b");

regex演示

\b模式是字边界,(?:...)?(?:\\.\\d+)?中是一个非捕获组,重复一次或零次,也就是说是可选的。

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

https://stackoverflow.com/questions/56107665

复制
相关文章

相似问题

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