c#REGEX使用组中包含的新行解析内容

问题描述 投票:1回答:2

我正在尝试使用c#来评估此模式后面的字符串的内容(数字和描述由选项卡分隔 - 标题不是文本的一部分,仅在此处为了解释):

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

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

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

这给了我3场比赛,但新线上第二场比赛的文字总是被丢弃。无法找到如何在描述组中的多个行上包含文本。

c# regex regex-group
2个回答
1
投票

您可以使用负向前瞻来断言.*后面的内容不是换行符和1+位数后跟一个制表符。

重复匹配整行的0+次以使其保持在description组中。

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

说明

  • (?'number'\d+)number组中匹配1+数字
  • \t匹配标签
  • (?'description'被称为捕获组description .+匹配除换行符之外的任何字符 (?:非捕获组 \n(?!\d+\t).*匹配换行符并声明后面的内容不是1+位数和一个标签 )*关闭组并重复0次以上
  • )关闭群组描述

看到.NET regex demo


0
投票

试试Regex:(?'number'\d+)\t(?'description'.+?)(?=^\d|\Z)

Demo

© www.soinside.com 2019 - 2024. All rights reserved.