如何在C#中使用正则表达式提取Id后左括号后的首个数字
提取Id:行中括号内的首个数字
问题描述
需要从包含Id:标识的行里,提取左括号(后的首个数字串。示例文本如下:
索赔信函已收到
Id: Sanjay Kumar (12345678 / NA123456789)
亲爱的客户,请查收报告
期望输出:12345678
原正则代码无法精准获取目标内容,需要调整正则表达式。
原正则的问题
原正则@"[\n\r].*Id:\s*([^\n\r]*)"会匹配换行后到下一行前的所有内容,捕获组返回的是Sanjay Kumar (12345678 / NA123456789),无法直接提取到目标数字。
修正后的正则与代码
使用以下正则可以精准定位并捕获目标数字:
Id:\s*[^(]*\((\d+)
正则各部分说明:
Id:精准匹配标识开头\s*匹配任意数量的空白字符(兼容Id:后可能的空格)[^(]*匹配左括号前的所有非左括号字符(跳过名字部分)\(匹配左括号本身(\d+)捕获一个或多个连续数字,即我们需要的目标内容
对应的C#代码示例:
var extractedDocContent = @"索赔信函已收到 Id: Sanjay Kumar (12345678 / NA123456789) 亲爱的客户,请查收报告"; var regex = new Regex(@"Id:\s*[^(]*\((\d+)"); var match = regex.Match(extractedDocContent); if (match.Success) { var targetUserId = match.Groups[1].Value; // 输出结果:12345678 Console.WriteLine(targetUserId); }
补充说明
如果Id:所在行存在跨行情况(示例中为单行),可以添加RegexOptions.Singleline选项,确保正则能正确匹配跨行内容:
var regex = new Regex(@"Id:\s*[^(]*\((\d+)", RegexOptions.Singleline);
内容的提问来源于stack exchange,提问作者Krishna Mohan
相关产品推荐
相关产品推荐

