我正在构建.Net应用程序,我需要从字符串中去除任何非十进制字符(不包括第一个“。”)。本质上,我正在清理用户输入以强制使用实数结果。
到目前为止,我一直在使用在线RegEx工具来尝试一次完成此任务,但是我并没有走得太远。
我希望做到这一点:
asd123.asd123.123.123 = 123.123123123
不幸的是,我只能设法达到
asd123.asd123.123.123 = 123.123.123.123
通过使用此代码。
System.Text.RegularExpressions.Regex.Replace(str, "[^\.|\d]*", "")
但是我一直试图删除除第一个小数点以外的所有内容。
可以一次完成吗?
有更好的方法吗?
最佳答案
这可以在单个正则表达式中完成,至少在.NET中,它支持lookbehind assertions内部的无限重复:
resultString = Regex.Replace(subjectString, @"(?<!^[^.]*)\.|[^\d.]", "");
说明:
(?<!^[^.]*) # Either match (as long as there is at least one dot before it)
\. # a dot
| # or
[^\d.] # any characters except digits or dots.
(?<!^[^.]*)
的意思是:断言不可能匹配从输入字符串的开头开始且仅由点以外的字符组成的字符串。对于第一个点之后的所有点,此条件均成立。
关于.net - 使用REGEX查找除字符的第一个出现以外的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287031/