我正在尝试使用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+)
在number
组中匹配1+数字\t
匹配标签(?'description'
被称为捕获组description
.+
匹配除换行符之外的任何字符
(?:
非捕获组
\n(?!\d+\t).*
匹配换行符并声明后面的内容不是1+位数和一个标签
)*
关闭组并重复0次以上)
关闭群组描述试试Regex:(?'number'\d+)\t(?'description'.+?)(?=^\d|\Z)