正则表达式匹配多行并为匹配结束提供条件

时间:2018-09-20 01:05:08

标签: regex regex-group

所以我要尝试使用正则表达式解析此文本:

Name: Test Data 1
Description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec feugiat nulla id nisi venenatis blandit.
 Donec blandit egestas orci, at tristique dui vehicula in. Maecenas fringilla fringilla enim, in pulvinar ex gravida
 in. Nam cursus facilisis ante, sed tristique nisl sagittis sed. In auctor felis id neque suscipit ullamcorper. Nunc
 faucibus elit sed metus vestibulum, ullamcorper pulvinar nisi auctor. Praesent sodales orci mauris, eget dapibus
 mauris sodales in. Ut iaculis, ante vitae ullamcorper semper, metus tortor auctor purus, eu convallis nulla lacus
 in tellus. Phasellus feugiat tempus neque, in fringilla nisi scelerisque sed. Donec elementum diam nec mattis dignissim.

我正在尝试对其进行解析以将其加载到数据库中。

使用此表达式,我试图在“名称”和“描述”参数上进行匹配,但也试图在参数值上进行匹配(有时可以是多行)。

(.*):\s(.*)

我已经搜索了一段时间,我似乎无法使其与整个段落匹配,但是当它到达空白行时便停止了。

我希望结果如下:

  • 第一场比赛
    • 第1组:姓名
    • 第2组:测试数据1
  • 第二场比赛
    • 第1组:说明
    • 第2组:多行描述值

https://regex101.com/r/mG2ms9/3

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

(.*?):\s([\s\S]*?)(?=\n(?:\n|\w|$))

Here it is on regex101.

[\s\S]匹配任何字符,甚至换行(默认情况下'。'不匹配)。

然后,我们将匹配尽可能少的字符(*?,直到下一行为空白(\n)的点为止,并以单词字符(\w开始),或者是字符串($)的结尾。

我们可以避免使用\w选项,因为description参数中的所有新行均以空格开头。如果并非总是如此,则可以将\w替换为.*:之类,以检查下一行是否包含“:”,如果停止则停止。

请注意,我禁用了多行模式;在这里不合适。