我有一个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/