最好的解决方案可能是针对该任务使用特定于语言的内置方法。
如果您无法使用它们,则可以使用
^(-?d+)(?:.0+|(.d*?)0+|.+)?$
并替换为
$1$2。
请参阅regex演示。相应地调整正则表达式。这里是解释:
^
-字符串开始(-?d+)
-组1捕获1或0减符号,然后捕获1或多个数字(?:.0+|(.d*?)0+|.+)?
-一个 可选的 (由于拖尾而匹配1或0次?
)非捕获组,与3个替代方案匹配:.0+
-小数点后跟1+零(.d*?)0+
-第2组使用任意0+数字捕获点,并尽可能少并匹配1+零.+
-( 可选分支,如果不需要,您可以将其删除 )-匹配尾随点
$
-字符串结尾。
Java演示:
String s = "50.000n50n50.100n50.040n50.n50.000n50.500n50n-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]


