.net - 使用REGEX查找除字符的第一个出现以外的所有字符

标签 .net regex

我正在构建.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/

相关文章:

c# - 调用存储过程时出现语法错误。我看不出问题出在哪里

regex - 当 regexp_like 和 regexp_extract 工作正常时,Impala regexp_like 查询返回 null

python - 匹配字符串,其中多个捕获组在正则表达式中必须不同

java - 使用反向引用来引用模式而不是实际匹配

r - R中find_replace nul字符

c# - 独立开发人员 (.NET) 的最佳持续集成设置

.net - 是否可以防止控件继承其容器的视觉样式?

c# - 如何从 C# 中的 URL 查询字符串中提取值?

c# - 全局化的自定义数字格式 - 可变小数点

c# - 我收到错误 "System.Array does not contain a definition for LastWriteTime"