c# REGEX 分析包含新行的内容



我正在尝试使用 c# 评估遵循此模式的字符串的内容(数字和描述由制表符分隔 - 标题不是文本的一部分,仅在此处进行解释(:

#   description
1   first item
2   second item on two or
    more lines of text
3   third item

我想得到一个匹配列表,其中有一个组用于数字和一个组用于描述。 我几乎通过以下正则表达式实现了它:

(?'number'd+)(?:t)(?'description'.+)

这给了我 3 场比赛,但新行上第二场比赛的文本总是被丢弃。 找不到如何在说明组中的多行中包含文本。

您可以使用否定的前瞻性来断言.*后面的内容不是换行符和 1+ 位数字后跟制表符。

重复 0+ 次匹配整行以将其保留在description组中。

(?'number'd+)t(?'description'.+(?:n(?!d+t).*)*)

解释

  • (?'number'd+) 匹配组中的 1+ 位数字 number
  • t 匹配选项卡
  • (?'description' 命名捕获组description
    • .+ 匹配除换行符以外的任何字符
    • (?: 非捕获组
      • n(?!d+t).* 匹配换行符并断言以下内容不是 1+ 位数字和制表符
    • )* 关闭组并重复 0+ 次
  • ) 关闭组说明

查看 .NET 正则表达式演示

尝试正则表达式: (?'number'd+)t(?'description'.+?)(?=^d|Z)

演示

最新更新