删除非数字,非小数,重复小数

时间:2012-06-18 05:34:16

标签: c# regex

我使用以下方法删除所有非数字和非小数值:

Regex.Replace("A1B2C3.D4E5F6.G7H8I9", @"[^-?\d+\.]", "");
  

输出:123.456.789

问题是重复的小数。我需要删除除第一个小数之外的所有内容。

因此输出变为:123.456789

我找到了模式"\.(?=.*\.)",但输出了123456.789。这是最后一个小数而不是第一个小数。

任何人都可以将这两种模式组合成一个也会在第一个小数后删除重复小数的模式吗? TY

2 个答案:

答案 0 :(得分:3)

您可以进行正则表达式比较,然后将字符串拆分为小数位

        string newval = Regex.Replace("A1B2C3.D4E5F6.G7H8I9", @"[^-?\d+\.]", "");
        string[] tempsplit = newval.Split('.');

然后通过添加'。'将它们重新组合在一起。在tempsplit [0]和tempsplit [1]之间,接着是数组中的其余字符串。

答案 1 :(得分:2)

您可以通过替换以下内容来替换除.之外的所有内容:

(?<=\.[^.]*)\.

您可以轻松地将其集成到正则表达式中:

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

如果前面有另一个点,则只匹配一个点。请注意,此正则表达式不适用于大多数其他正则表达式引擎,因为它使用可变宽度的lookbehind。