用于删除尾随零的正则表达式

时间:2009-07-09 18:18:33

标签: .net regex

我正在寻找一个正则表达式(.NET)来删除尾随零:

11645766.560000001000   ->  11645766.560000001
10190045.740000000000   ->  10190045.74
1455720.820000000100    ->  1455720.8200000001  

等...

<小时/> 我在String.Trim()上使用正则表达式,因为数字在一个字符串中,实际示例:

!BEGIN !>>C85.18 POS_LEVEL.T129{11645766.560000001000} = POS_LEVEL.T129 {10190045.740000000000} + WORK_LEVEL.T129{1455720.820000000100} END;

需要转换为:

!BEGIN !>>C85.18 POS_LEVEL.T129{11645766.560000001} = POS_LEVEL.T129{10190045.74} + WORK_LEVEL.T129{1455720.8200000001} END;

5 个答案:

答案 0 :(得分:16)

如果数字嵌入在随机字符串中,则可以使用正则表达式:

(?<=\.\d+?)0+(?=\D|$) 替换为空字符串

如果它们出现在十进制数字的句点之后(它将始终保留一个零),那将修剪尾随零。它还说明了最后出现的数字。

由于您在此期间添加了.NET标记,因此这里是代码:

string replaced = Regex.Replace(
                         inputString,
                         @"(?<=\.\d+?)0+(?=\D|$)",
                         String.Empty);

答案 1 :(得分:8)

在.Net中,您可以执行以下操作

var newStr = Regex.Replace(input, "0+$",String.Empty);

答案 2 :(得分:0)

([0]+)\b

然后删除$ 1

答案 3 :(得分:-1)

上面的RegEx AND Trim()的一个警告......如果你的输入没有小数点,你可能会得到错误的数字。例如,(“1000”)。TrimEnd('0')= 1。

此解决方法将解决该问题:

string Trimmed = (Untrimmed.IndexOf('.')>=0) ? Untrimmed.TrimEnd('0') : Untrimmed;

当然,使用“。”小数是特定于文化的 - 有些文化使用逗号。如果您正在尝试构建文化感知,则需要使用System.Threading.Thread.CurrentThread.CurrentCulture.NumberDecimalSeparator而不是文字“。”字符。

修改:根据您上面编辑的问题,RegEx是正确的答案。类似的东西:

Trimmed = RegEx.Replace(Untrimmed, "(\d\.\d*[1-9])0+([^\d]|$)", "$1$2");

(上面的[1-9]是我避免贪婪和捕捉0的懒惰方式,可能有一种更简单的方法。)

答案 4 :(得分:-1)

以下内容将匹配小数点后面的零和任意小数位数,并且不在小数点或数字之前。

(?<=\.\d*)(0+)(?=[^.\d])