匹配所有数字,包括正整数/负整数/正负小数
表达式:
@"[+-]?\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+
匹配过程忽略大小写