匹配所有数字,包括正整数/负整数/正负小数
表达式:
@"[+-]?\d+(\.\d*)?|[+-]?\.\d+"
(根据代码环境选择忽略@)
表达式解析
[+-]? 匹配正负号
\d+ 匹配数字
(\.\d*)? 匹配小数点和数字组合
以上匹配绝大部分数字,例如 123,+123,-123,123.321,-123.321
但不能匹配 .123 这种格式的数字,因此增加后一部分
| 逻辑符号 或者
[+-]?\.\d+ 匹配示例 +.123 -.123 .321
综合起来匹配大部分数字
※没匹配科学计数法
示例代码:
// 定义正则表达式用来匹配 img 标签 Regex reg = new Regex(@"[+-]?\d+(\.\d*)?|[+-]?\.\d+"); // 搜索匹配的字符串 MatchCollection matches = reg.Matches(str); Debug.WriteLine($"匹配到{matches.Count}项目"); string[] numbers = new string[matches.Count]; int i = 0; foreach (Match match in matches) { numbers[i++] = match.Value; } double[] returns = new double[i]; for (int j = 0; j < returns.Length; j++) { try { returns[j] = Convert.ToDouble(numbers[j]); } catch (Exception) { Debug.WriteLine(j); } }
直接使用Nuget
https://www.nuget.org/packages/FindNumberInString/1.0.0
Install-Package FindNumberInString -Version 1.0.0
----后记,增加匹配科学记数法
([+-]?)(\d+)(\.\d)?e([+-]?)(\d+)|[+-]?\d+(\.\d*)?|[+-]?\.\d+
包含三部分
1.科学记数法
([+-]?)(\d+)(\.\d)?e([+-]?)(\d+)
| 或者
2.数字
[+-]?\d+(\.\d*)?
| 或者
3.简写数字
[+-]?\.\d+
匹配过程忽略大小写