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

.NET C#正则表达式在线可用但匹配成功却无结果

问题描述

需要从字符串“SHT. 141”中提取“141”,使用正则表达式(?<=SHT[.][ ]?)[0-9]{0,9}。在线正则编辑器中能成功提取数字,但在.NET C#代码里,Match.Success返回true,却拿不到有效匹配值。

相关代码如下:

Regex sheetNumber = new Regex("(?<=SHT[.][ ]?)[0-9]{0,9}");

string cellText = _selectedTable.Cells.Select(x => x.Value).Aggregate((x, y) => x + y);

var match = sheetNumber.Match(cellText);

if (match.Success)
{
    var value = match.Value;
}
问题原因与解决办法
  • 根本原因:正则中的[0-9]{0,9}允许匹配0个数字,也就是说即使目标位置没有数字,正则也会匹配一个空字符串,这就导致Match.Success为true但match.Value是空值。在线编辑器测试时用的是标准目标字符串,所以能匹配到数字,但如果你的cellText实际内容和测试用例有差异(比如空格数量不对、符号格式不同,或者数字位置不符合预期),就会触发空匹配的情况。
  • 修正正则表达式:将[0-9]{0,9}改为[0-9]{1,9},强制要求至少匹配1个数字,这样就不会匹配空字符串了。修正后的正则:
    (?<=SHT[.][ ]?)[0-9]{1,9}
    
  • 额外排查建议:在代码中先输出cellText的实际内容,确认它确实是包含“SHT. 141”的目标字符串,避免因单元格拼接后内容不符合预期导致匹配异常。比如添加一行调试代码:
    Console.WriteLine($"实际拼接后的单元格内容:{cellText}");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:01:03