java - 正则表达式从文件中检索双数字,但忽略具有多个点的数字

标签 java regex

检索文件中的所有双数并返回总和,但避免使用多个点的值。

测试用例:

在文件中

12.3,123.45,19,2.16.8.1.1

输出

预期输出 -> 154.75 我的输出 -> 166.01

-?\\d+\\.?\\d* 这将检索所有双数字,但无法忽略带有多个点的数字。

FileReader reader = new FileReader(filename);
BufferedReader in = new BufferedReader(reader);
String line;

while ((line = in.readLine()) != null) {
    Pattern pattern = Pattern.compile("-?\\d+\\.?\\d*");
    Matcher matcher = pattern.matcher(line);
    while (matcher.find()) {
        String x = matcher.group(0);
        y = Double.parseDouble(x);
        sum = sum + y;
    }
}

预期输出 -> 154.75 我的输出 -> 166.01

最佳答案

您可以使用

-?(?<!\d)(?<!\d\.)\d*\.?\d+(?!\.?\d)

如果不需要匹配可选-前面的,去掉就可以了。

请参阅regex demo

详细信息

  • -? - 可选的连字符
  • (?<!\d)(?<!\d\.) - 紧靠左侧,不应有数字或数字+ .
  • \d* - 0+ 位数字
  • \.? - 可选点
  • \d+ - 1+ 位数字
  • (?!\.?\d) - 紧靠右边,不能有数字或 . + 数字。

在 Java 中,使用:

Pattern pattern = Pattern.compile("-?(?<!\\d)(?<!\\d\\.)\\d*\\.?\\d+(?!\\.?\\d)");

关于java - 正则表达式从文件中检索双数字,但忽略具有多个点的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58186010/

相关文章:

java - 需要帮助将脚本引擎加载到 Karaf 中

Java string.hashcode() 给出不同的值

java - 静态变量和 block 之间的执行顺序是如何执行的?

java - 正则表达式向后匹配最近的字符

SQL只获取带有前导数字的字符串

javascript - JS 正则表达式执行分隔符之间的内部字符串并检查损坏的分隔符

sql - 使用 Postgresql 提取第二个找到的匹配子字符串

eclipse - 如何在不运行 JRE 安装的情况下运行 Eclipse?

java - 优化JDBC中数据调用到JTable

javascript - 正则表达式在 JavaScript 中无法正常工作