You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#正则表达式仅匹配单个值,如何获取多个目标数值?

问题排查与解决方法

咱们一步一步拆解你遇到的问题:

核心问题分析

1. 正则表达式的小数点未转义

你的正则@"([0-9].[0-9]{4}mm)"里的.是正则的特殊字符,代表任意单个字符,而非你要匹配的小数点。这会导致匹配逻辑存在隐患(比如类似0X0000mm的字符串也会被误匹配),必须转义成\.才能精准匹配小数点。

2. 捕获组数量不匹配

你的正则仅定义了1个捕获组(括号包裹的内容),但代码里却尝试获取match.Groups[2].Value,这只会得到空字符串,完全没有意义。

3. 循环中覆盖了结果

你在循环里每次直接给label1.Text赋值,会导致之前匹配到的内容被后续结果覆盖,所以最终只会显示最后一个匹配项(也就是0.0047mm)。


修正后的代码示例

string st = "New Specification Result : Measures 0.0039mm ( 4 Microns )New Specification Result : Measures 0.0047mm ( 5 Microns )";
var src = st;
// 修正正则:转义小数点,用\d代替[0-9]更简洁,确保只匹配目标格式
var pattern = @"(\d\.\d{4}mm)";
var expr = new Regex(pattern, RegexOptions.IgnoreCase);

// 用StringBuilder累加结果,避免覆盖
StringBuilder resultBuilder = new StringBuilder();
foreach (Match match in expr.Matches(src))
{
    string key = match.Groups[1].Value;
    // 可按需添加分隔符,比如逗号加空格
    resultBuilder.Append(key + " ");
}

// 去除末尾多余空格后赋值给标签
label1.Text = resultBuilder.ToString().Trim();

额外优化建议

  • 如果数值的整数部分可能不止一位(比如1.0000mm),可以把正则调整为(\d+\.\d{4}mm),+表示匹配1个或多个整数位数字。
  • 若要确保只匹配Measures后面的数值,可把正则改成Measures (\d\.\d{4}mm),避免字符串中其他位置的类似数值被误匹配。

内容的提问来源于stack exchange,提问作者Yi Jian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:55