使用REGEX查找除第一次出现的字符外的所有字符

Mik*_*ike 9 .net regex

我正在构建.Net应用程序,我需要从字符串中删除任何非小数字符(不包括第一个'.').基本上我正在清理用户输入以强制实数结果.

到目前为止,我一直在使用在线RegEx工具试图在一次通过中实现这一点,但我没有走得太远.

我希望这样做:

asd123.asd123.123.123 = 123.123123123
Run Code Online (Sandbox Code Playgroud)

不幸的是,我只是设法进入了舞台

asd123.asd123.123.123 = 123.123.123.123
Run Code Online (Sandbox Code Playgroud)

通过使用此代码.

System.Text.RegularExpressions.Regex.Replace(str, "[^\.|\d]*", "")
Run Code Online (Sandbox Code Playgroud)

但是我试图删除除第一个小数点以外的所有内容.

这可以一次完成吗?
有没有更好的方式?

Tim*_*ker 6

这可以在单个正则表达式中完成,至少在.NET中支持lookbehind断言中的无限重复:

resultString = Regex.Replace(subjectString, @"(?<!^[^.]*)\.|[^\d.]", "");
Run Code Online (Sandbox Code Playgroud)

说明:

(?<!^[^.]*) # Either match (as long as there is at least one dot before it)
\.          # a dot
|           # or
[^\d.]      # any characters except digits or dots.
Run Code Online (Sandbox Code Playgroud)

(?<!^[^.]*)意味着:断言不可能匹配从输入字符串开头开始的字符串,并且只包含除点之外的字符.对于第一个点之后的所有点,这种情况都适用.