个人资料

跳过导航链接首页 > 博客列表 > 博客正文

正则表达式匹配所有数字

:

匹配所有数字,包括正整数/负整数/正负小数

表达式:

@"[+-]?\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+


匹配过程忽略大小写

admin
最初发表2019/9/8 10:13:55 最近更新2019/9/9 10:54:58 20020
为此篇作品打分
10