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

C#中如何使用正则捕获相邻Division匹配项之间的可选行内容

问题说明

当前使用的正则表达式如下:

(?>Division: (\d+))(?>.*?\")?(.*?(?=\"))?

需要实现的匹配规则:

  • 捕获所有Division: 数字格式的条目,将数字编号存入第1个捕获分组
  • 捕获Division行自带的引号包裹的Description内容,存入第2个捕获分组
  • 捕获两个相邻Division条目之间的所有行内容,整体存入前一个Division匹配项的第3个捕获分组,无需拆分内容。例如示例中Division:8和Division:9之间的两行附属内容,需要全部归入Division:8对应的第3分组。

待匹配示例文本:

[Divisions]

Division: 1
Division: 2
Division: 3,    Description: "(test1)"
Division: 4
Division: 5
Division: 6,    Description: "test2"
Division: 7
Division: 8
Console,    Events: Fires, Alarams
Printer,    Events: Fires, Alarams
Division: 9
Division: 10

开发环境为C#。

可用正则及使用说明

直接使用以下正则表达式,匹配时开启RegexOptions.Singleline选项(允许.匹配换行符)即可:

Division:\s*(\d+)(?:[^"]*"([^"]*)")?\s*(.*?)(?=\s*Division:|\s*$)

各捕获分组对应内容:

  • 分组1:Division后的数字编号
  • 分组2:当前Division行引号内的Description内容,无Description时该分组捕获为空
  • 分组3:当前Division条目之后、下一个Division条目之前(或文本末尾之前)的所有附属行内容,无附属行时该分组捕获为空

匹配效果验证

针对给出的示例文本:

  • Division:3的分组2捕获结果为(test1),分组3为空
  • Division:6的分组2捕获结果为test2,分组3为空
  • Division:8的分组2为空,分组3捕获结果为两行附属内容:
    Console,    Events: Fires, Alarams
    Printer,    Events: Fires, Alarams
    
  • Division:10为最后一个条目,分组3为空

所有匹配结果完全符合需求,不会出现跨条目错配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:30:56