2

我正在使用以下方法删除所有非数字和非十进制值:

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

输出:123.456.789

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

所以输出变成:123.456789

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

任何人都可以将这两种模式组合成一个模式,同时删除第一个小数点后的重复小数点吗?泰

4

2 回答 2

3

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

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

然后通过放置一个“。”将它们重新组合在一起。在 tempsplit[0] 和 tempsplit[1] 之间,然后是数组中的其余字符串。

于 2012-06-18T05:41:43.573 回答
2

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

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

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

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

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

于 2012-06-18T05:37:03.123 回答