c# - 正则表达式过滤非数字字符

标签 c# regex number-formatting

我有一个Regex来在解析十进制数之前删除非数字字符。

我使用以下代码

Regex.Replace(myStr, "[^0-9.]", "");

现在这适用于十进制数字,但它删除了“符号”字符,即“A16.1”和“A-16.1”的输出都返回“16.1”...

使用以下编辑版本似乎可行

Regex.Replace(myStr, "[^-0-9.]", "");

但是不熟悉正则表达式,有经验的用户能否确认这是正确的表达式......?

最佳答案

我建议

 -?[0-9]+(\.[0-9]+)?

模式,即删除小数将是

 string result = Regex.Replace(myStr, @"-?[0-9]+(\.[0-9]+)?", "");

说明:

 -?           one or zero minus sign "-" - sign
 [0-9]+       at least one digit
 (\.[0-9]+)?  followed by one or none 
              fractional part (decimal separator and at least one digit)

如果您想要获取(而不是删除)号码,请使用匹配:

 string myStr = "-1,2.3.de2.43.";

 string[] numbers = Regex
   .Matches(myStr, @"-?[0-9]+(\.[0-9]+)?")
   .OfType<Match>()
   .Select(match => match.Value)
   .ToArray(); 

 // Test
 Console.Write(string.Join(Environment.NewLine, numbers));

结果是

 -1
 2.3
 2.43

关于c# - 正则表达式过滤非数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41224129/

相关文章:

c# - SQL c# 确定 sql server 的类型

c# - 如果C#中的字符串结尾存在<p> </p>,该如何删除呢?

javascript - Cx框架: How to set align:right and decimal precision on NumberField

sql - Netezza 格式化函数

javascript - 如何匹配 RegEx/JavaScript 中出现的特定长度?

python - 如何在不丢失有效数字的情况下转换 str 中的 float ?

c# - Windows Phone 8.1 中的后台线程

c# - iTextsharp 7 : Rotating a Stamp or Annotation

regex - Perl 正则表达式多行匹配到哈希

regex - Lua 模式匹配与正则表达式