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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:05:17