如何在C#中使用正则表达式提取含空格的指定字符串?
正则匹配失败问题解决
原正则的问题分析
- 正则末尾的
$强制要求匹配内容处于行尾,但目标字符串22334 E112233后还有换行和其他文本,不符合行尾条件,导致匹配失败。 - 正则最后的
|会匹配空字符串,Match方法会优先返回空匹配,直接得到空结果。 - 未锚定目标内容的前缀
REG #,无法精准定位需要提取的ID区域,容易误匹配其他无关数字。
正确实现方法
方案一:精准锚定前缀提取
通过REG #定位目标ID的起始位置,用捕获组提取需要的内容:
var myString= "my id is REG #22334 E112233 my name is xyz my city is xyz"; // 匹配REG #后接的5位数字 + 空格 + E开头的6位数字 var regex = new Regex(@"REG #(\d{5} E\d{6})"); var match = regex.Match(myString); var id = match.Success ? match.Groups[1].Value : string.Empty; // 输出结果:22334 E112233
方案二:限制数字范围(匹配1-3开头的5位数字)
如果需要确保ID的数字部分以1-3开头,调整正则为:
var regex = new Regex(@"REG #([1-3]\d{4} E\d{6})");
关键调整说明
- 移除原正则的
$和多余的|,消除匹配限制和空匹配干扰。 - 用
REG #作为前缀锚定,确保只提取目标ID内容,避免误匹配。 - 使用捕获组(括号包裹的区域)直接获取需要的结果,通过
Groups[1]读取捕获值。
内容的提问来源于stack exchange,提问作者Krishna Mohan
相关产品推荐
相关产品推荐

