我正在寻找一个正则表达式(.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;
答案 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])