当前位置: 首页 > 面试题库 >

Java:如何从正则表达式解析双精度

邢灿
2023-03-14
问题内容

我有一个看起来像“ A = 1.23; B = 2.345; C = 3.567”的字符串

我只对“ C = 3.567”感兴趣

到目前为止,我有:

     Matcher m = Pattern.compile("C=\\d+.\\d+").matcher("A=1.23;B=2.345;C=3.567");

    while(m.find()){ 
        double d = Double.parseDouble(m.group());
        System.out.println(d);
    }

问题是它显示3与567分开

输出:

3.0

567.0

我想知道如何包含小数点,以便输出“ 3.567”

编辑:如果没有小数点,我也想匹配C:所以我想捕获3567和3.567

由于C =也是内置在模式中的,因此在解析double之前如何去除它?


问题答案:

我可能会在这部分上弄错了,但之所以将两者分开是因为
group()
仅匹配最后匹配的子序列,这是每次find()调用都会匹配的东西。

谢谢马克·拜尔斯。

但是可以肯定的是,您可以通过将所需的整个零件放在“捕获组”中来解决此问题,这可以通过将其放在括号中来完成。这样一来,您就可以将正则表达式的匹配部分组合到一个子字符串中。您的模式将如下所示:

Pattern.compile("C=(\\d+\\.\\d+)")

对于解析3567或3.567,您的模式将是 C=(\\d+(\\.\\d+)?) 第1组代表整数。
另外,请注意,由于您特别想匹配一个句点,因此您希望转义.(句点)字符,以便不将其解释为“任何字符”标记。不过,对于此输入,这并不重要

然后,要得到3.567,您将呼叫m。group(1)获取第一个(从1开始计数)指定的组。这意味着您的Double.parseDouble调用实际上将变为Double.parseDouble("3.567")

至于将C =从您的模式中删除,由于我对RegExp不太了解,因此我建议您在分号上分割输入字符串,然后检查每个分割是否包含C。那么您可以应用模式(与捕获组一起使用)从Matcher中获取3.567。

编辑 对于gawi评论中更一般(可能更有用!)的案例,请使用以下内容(来自http://www.regular-
expressions.info/floatingpoint.html)

Pattern.compile("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")

它支持可选符号,可选整数或可选小数部分以及可选正/负指数。在需要的地方插入捕获组以单独挑选零件。整个指数都在自己的组中,以使其整体上是可选的。



 类似资料:
  • Java中的正则表达式问题。我正在从元素href属性中提取Id号。我在一个字符串中有一堆这样的链接:

  • 问题内容: 有什么方法可以在python中的流上使用正则表达式匹配吗?喜欢 而且我不想通过获取整个字符串的值来做到这一点。我想知道是否有任何方法可以在srtream上匹配正则表达式(即时)。 问题答案: 我有同样的问题。首先想到的是实现一个类,该类的作用类似于字符串,但仅从流中读取当前所需的数据(我通过重新实现并提取和缓冲字符直到访问的最高位置来完成此操作……)。 这没有解决(我从中得到了“ Ty

  • 问题内容: 我正在创建一个CSS编辑器,并试图创建一个可以从CSS文档获取数据的正则表达式。如果我拥有一个属性,则此正则表达式有效,但我无法使其对所有属性都有效。我在PHP中使用preg / perl语法。 正则表达式 测试用例 预期结果 实际结果 在此先感谢您的帮助-整个下午使我感到困惑! 问题答案: 对于单个正则表达式来说,这似乎太令人费解了。好吧,我敢肯定,通过正确的扩展,高级用户可以创建正

  • 我试图在正则表达式中组合if-else,基本上,如果字符串中存在一些模式,则捕获一个模式,如果不存在,则捕获另一个模式。 字符串是:'https://www.searchpage.com/searchcompany.aspx?companyId=41490234 因此,如果在字符串中检测到“?”,则正则表达式应捕获“?”标记之后的所有内容;如果没有,那就从头抓起。 我使用了:

  • 问题内容: 我正在尝试输入之间的内容,我的模式没有做正确的事,请帮忙。 下面是sudocode: 要求的输出: 之一 二 三 问题答案: 先行使用并在循环中使用,而不是: 看到它在线上工作:ideone 但是最好在这里使用split: 看到它在线上工作:ideone

  • 主要内容:正则表达式支持字符正则表达式(Regular Expression)又称正规表示法、常规表示法,在代码中常简写为 regex、regexp 或 RE,它是计算机科学的一个概念。 正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作,是一种可以用于模式匹配和替换的规范。一个正则表达式就是由普通的字符(如字符 a~z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的