2013-03-20 73 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後跟一個空格。

注意+是需要在一排匹配多個換行符。否則,並不是所有的換行符都會匹配。