首页 > 解决方案 > 跨双换行符的正则表达式

问题描述

我有以下文本,我需要从中删除部分内容:

[Firstname LastName 21/06/2018 - 17:27]
Lorem Ipsum

[Foo Bar 25/01/2017 - 12:10]
Lorem Ipsum - First line
Lorem ipsum Second line
Lorem ipsum third line


Some other random text

我需要提取这段文本的部分内容,我几乎可以使用以下正则表达式来做到这一点:

\[(?<name>\w+? \w+?) (?<date>\d{2}\/\d{2}\/\d{4}) - (?<time>\d{2}:\d{2})\]\n*(?<note>.+)

一切正常,除了标记为 的组<note>,它只拾取注释的第一行。如果注释中有换行符,则不会拾取换行符之后的任何内容。

如何让它匹配注释部分中的所有文本,直到正则表达式找到双换行符?

标签: regex

解决方案


我已经修改了你原来的正则表达式给你预期的输出。

\[(?<name>\w+? \w+?) (?<date>\d{2}\/\d{2}\/\d{4}) - (?<time>\d{2}:\d{2})\]\n*(?<note>.+\n?\n?)+

它应该匹配所有内容,直到双换行符,注意唯一的变化是在最后。

代替...

(?<note>.+)

就是现在...

(?<note>.+\n?\n?)+

编辑:更改了正则表达式,因此它将包括由一个换行符分隔的行,但不是两个。


推荐阅读