c# REGEX 解析包含在组中的新行的内容
c# REGEX parse content with new line included in group
我正在尝试使用 c# 评估遵循此模式的字符串的内容(数字和描述由制表符分隔 - header 不是文本的一部分,只是为了解释 ):
# description
1 first item
2 second item on two or
more lines of text
3 third item
我想获得一个匹配列表,其中有一个用于编号的组和一个用于描述的组。我几乎用以下正则表达式实现了它:
(?'number'\d+)(?:\t)(?'description'.+)
这给了我 3 个匹配项,但新行中第二个匹配项的文本总是被丢弃。找不到如何在 description 组中包含多行文本。
您可以使用否定前瞻来断言 .*
之后的内容不是换行符和 1+ 位后跟制表符。
重复 0+ 次匹配整行以将其保留在 description
组中。
(?'number'\d+)\t(?'description'.+(?:\n(?!\d+\t).*)*)
说明
(?'number'\d+)
匹配组中的 1+ 个数字 number
\t
匹配标签
(?'description'
命名捕获组 description
.+
匹配除换行符外的任何字符
(?:
非捕获组
\n(?!\d+\t).*
匹配换行符并断言后面不是 1+ 数字和制表符
)*
关闭组重复0+次
)
关闭群描述
看到一个.NET regex demo
试试正则表达式:(?'number'\d+)\t(?'description'.+?)(?=^\d|\Z)
我正在尝试使用 c# 评估遵循此模式的字符串的内容(数字和描述由制表符分隔 - header 不是文本的一部分,只是为了解释 ):
# description
1 first item
2 second item on two or
more lines of text
3 third item
我想获得一个匹配列表,其中有一个用于编号的组和一个用于描述的组。我几乎用以下正则表达式实现了它:
(?'number'\d+)(?:\t)(?'description'.+)
这给了我 3 个匹配项,但新行中第二个匹配项的文本总是被丢弃。找不到如何在 description 组中包含多行文本。
您可以使用否定前瞻来断言 .*
之后的内容不是换行符和 1+ 位后跟制表符。
重复 0+ 次匹配整行以将其保留在 description
组中。
(?'number'\d+)\t(?'description'.+(?:\n(?!\d+\t).*)*)
说明
(?'number'\d+)
匹配组中的 1+ 个数字number
\t
匹配标签(?'description'
命名捕获组description
.+
匹配除换行符外的任何字符(?:
非捕获组\n(?!\d+\t).*
匹配换行符并断言后面不是 1+ 数字和制表符
)*
关闭组重复0+次
)
关闭群描述
看到一个.NET regex demo
试试正则表达式:(?'number'\d+)\t(?'description'.+?)(?=^\d|\Z)