gpt4 book ai didi

java - 正则表达式截断尾随零

转载 作者:行者123 更新时间:2023-11-30 06:53:11 26 4
gpt4 key购买 nike

我正在尝试构建一个正则表达式(用于 Java)以截断小数点后的尾随零。例如

  • 50.000 → 50
  • 50.500 → 50.5
  • 50.0500 → 50.05
  • -5 → -5
  • 50 → 50
  • 5.5 → 5.5

想法是以尽可能紧凑的形式表示实数(或整数)。

这是我构建的:

^(-?[.0-9]+?)\.?0+$

我正在使用 $1 来捕获截断的数字字符串。

上述模式的问题是 50 被截断为 5。我需要某种方式来表示 0+ 必须跟在 .(小数点)之后。
我试过使用 negative-behind,但无法得到任何匹配项。

最佳答案

最好的解决方案可能是针对该任务使用内置的特定于语言的方法。

如果你不能使用它们,你可以使用

^(-?\d+)(?:\.0+|(\.\d*?)0+|\.+)?$

并替换为 $1$2

参见 regex demo .相应地调整正则表达式。解释如下:

  • ^ - 字符串的开始
  • (-?\d+) - 第 1 组捕获 1 或 0 个减号,然后是 1 个或多个数字
  • (?:\.0+|(\.\d*?)0+|\.+)? - 可选(匹配 1 次或 0 次由于尾随 ?) 非捕获组匹配 3 个备选方案:
    • \.0+ - 小数点后跟 1+ 个零
    • (\.\d*?)0+ - 第 2 组捕获具有任意 0+ 数字但尽可能少的点并匹配 1+ 零
    • \.+ -(可选分支,如果不需要可以将其删除)-匹配尾随点
  • $ - 字符串结尾。

Java demo :

String s = "50.000\n50\n50.100\n50.040\n50.\n50.000\n50.500\n50\n-5";
System.out.println(s.replaceAll("(?m)^(-?\\d+)(?:\\.0+|(\\.\\d*?)0+|\\.+)?$", "$1$2"));
// => [50, 50, 50.1, 50.04, 50, 50, 50.5, 50, -5]

关于java - 正则表达式截断尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37828401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com