删除换行符,除非前面有

时间:2013-03-20 14:32:58

标签: regex notepad++

我需要从某些文字中删除多余的新行。我只需要保留紧跟一个句号/句号字符.的新行。

在下面的示例文字中,我只需要保留2个新行:一个在...arcu rhoncus.之后,一个在...ac in est.之后。

Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis
semper ac in est.
Vivamus fermentum semper porta. Nunc diam velit, adipiscing ut tristique
vitae, sagittis vel odio. Maecenas convallis ullamcorper ultricies. Curabitur
ornare, ligula semper consectetur sagittis, nisi diam iaculis velit, id 
fringilla sem nunc vel mi.

我正在使用notepad ++。

我可以将我想要保留的内容与下面的内容相匹配,但我不确定如何制作整个解决方案。

[.]$

3 个答案:

答案 0 :(得分:3)

与建议的in this comment一样,负面的后视效果很好。在Notepad ++中搜索此正则表达式并替换为单个空格:

(?<!\.)\s*\r\n\s*

如果您只有\n而不是\r\n,那么只需删除\r

请注意,使用\r?时,Notepad ++似乎与非贪婪相匹配,因此\r不会被删除。

Notepad ++ v6.1.5(UNICODE)的结果:

Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.
Vivamus fermentum semper porta. Nunc diam velit, adipiscing ut tristique vitae, sagittis vel odio. Maecenas convallis ullamcorper ultricies. Curabitur ornare, ligula semper consectetur sagittis, nisi diam iaculis velit, id fringilla sem nunc vel mi.

答案 1 :(得分:2)

您需要使用负面的lookbehind并替换为space:

(?<!\.)\r\n

对于不了解此构造(或者不支持lookbehind)的人的另一个选择是首先用\.\r\n字符串之类的内容替换<rnt>的所有出现,然后删除所有新行,然后再次将<rnt>替换为\.\r\n

答案 2 :(得分:2)

这是一个非后视方法:

搜索:

([^.])(\r\n)+

并替换为:

\1 

\1后面跟一个空格。

注意,需要+来匹配一行中的多个换行符。否则,并非所有换行都匹配。