2013-03-20 68 views
2

我需要从某些文本中删除多余的换行符。我只需要保留紧接着一个完整停止/句点字符.的换行符。删除换行符,除非前面有

在下面的示例文本中,我只需要保留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. 

我正在使用记事本++。

我可以匹配我想保持与下面的东西,但我不知道我怎样才能使整个解决方案。

[.]$ 
+1

你为什么不还留着换行后“malesuada arcu rhoncus。”在第一行? – Sepster 2013-03-20 14:34:46

+1

如果支持lookbehind,这很容易:您可以测试'(?<!\。*)\ n'吗? – 2013-03-20 14:36:54

+0

你知道你的换行符是DOS,* NIX还是MAC换行符吗?即CR和/或LF的哪种组合? – Sepster 2013-03-20 14:38:53

回答

3

像建议in this comment负向后看效果很好。搜索这个正则表达式在记事本++和用一个空格替换:

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

如果你只有有\n而不是\r\n则只是删除\r

注意,使用记事本\r? ++时似乎匹配非贪婪所以\r不会被删除。

结果用记事本++ 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. 
+0

看起来像后面不支持记事本++ :( – aland 2013-03-20 15:01:29

+1

@aland它是,我只是用我的正则表达式尝试你的例子,它的工作原理(Notepad ++ v6.1.5( UNICODE))。 – speakr 2013-03-20 15:03:54

+0

ahh,所以我必须升级! – aland 2013-03-20 15:05:10

2

您需要使用负回顾后,用空格替换:

(?<!\.)\r\n 

有人另一种选择,不知道这个构造(或者如果不支持回顾后),将先更换与像<rnt>字符串的东西不同的\.\r\n所有出现,然后删除所有换行符,然后再更换<rnt>\.\r\n

+0

也感谢'解决方法',其中lookbehind不支持 – aland 2013-03-20 15:10:33

2

这里是一个非向后看方法:

搜索:

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

,代之以:

\1 

\1后跟一个空格。

注意+是需要在一排匹配多个换行符。否则,并不是所有的换行符都会匹配。