我正在尝试构造一个正则表达式(用于Java)以截断小数点后的零。例如
想法是以最紧凑的形式表示实数(或整数)。
这是我构造的:
^(-?[.0-9]+?)\.?0+$
我$1用来捕获截断的数字字符串。
$1
上面的模式的问题是50被截断为5。我需要某种方式来表示0+必须遵循.(小数点)。 我尝试过使用负数落后,但没有任何匹配。
0+
.
最好的解决方案可能是针对该任务使用特定于语言的内置方法。
如果您无法使用它们,则可以使用
^(-?\d+)(?:\.0+|(\.\d*?)0+|\.+)?$
并替换为$1$2。
$1$2
请参阅regex演示。相应地调整正则表达式。这里是解释:
^
(-?\d+)
(?:\.0+|(\.\d*?)0+|\.+)?
?
\.0+
(\.\d*?)0+
\.+
$
Java演示:
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]