2009-11-02 123 views
0

我有一個多行文本文件。我將嘗試設置一種模式,以便在文本的某些行中添加新的回車符。這條線是這樣的:如何使用正則表達式在文本中添加回車符?

lorem ipsum。
悲坐阿梅特,consectetur adipiscing ELIT [FIS] Donec feugiat

好,圖案爲線,接着其他具有一些字符和一個「[」字符太。如果'['不存在,則該模式失敗並且未添加回車符。

我該如何使用正則表達式?

我使用C#作爲編程語言和正則表達式引擎。

+0

對我的問題的迴應是在這裏:http://stackoverflow.com/questions/767869/how-to-regex-replace-match-group-item-with-method-result – jaloplo 2009-11-12 17:09:09

回答

2

我相信你可以用\ r作回車符和\ n換新線

1

什麼味道?這裏是爲C#完成的:

string yourString = @"el tiempo. 
campo vectorial vector field. [FIS] Campo "; 
string newString = Regex.Replace(yourString, "el tiempo.", "$0\r\n"); // just \n may be sufficient though 

編輯:上面是對原始問題的回答。在Peter Boughton的出色答案後,我不需要增加太多。那麼,也許這一點,沒有環視斷言的一個小正則表達式,將會簡單地用兩條換行符替換所有點,然後是一條或多條換行符。

string newString = Regex.Replace(yourString, @"\.(\r|\n)+", ".\r\n\r\n"); 
+0

請問,你可以更通用???想象一下「el tiempo」。是'。'的任何文字。是它的最後一個字符。 – jaloplo 2009-11-02 15:53:49

+1

jaloplo,如果你想更通用,你應該在問題中說明這一點。您還沒有指定是否應在「字段。[FIS]」部分中添加換行符。 – 2009-11-02 16:32:44

+0

我認爲這很明顯,但我對此表示歉意。我會盡量在下一個問題中更具體。 – jaloplo 2009-11-02 17:05:01

2

如果您想要在a之後添加換行符。那麼你只需用自己和換行符來替換它。爲了確保它是最後一個字符,請使用先行檢查它後面是空白,即(?=\s)


所以,用換行符替換(建議在大多數情況下):

replace(input , '\.(?=\s)' , '\.\n') 


如果必須使用回車(並且有需要它,甚至在Windows上極少數地方),你可以簡單地添加一個:

replace(input , '\.(?=\s)' , '\.\r\n') 


如果你想確保一個。總是跟着兩個換行,並不會造成多餘的換行符,如果他們已經想要的,那麼它就會變得稍微有點複雜,需要負超前,但看起來是這樣的:

replace(input , '\.(?!\S)(?:\r?\n){0,2}' , '\.\r\n\r\n') 

因爲正則表達式引擎默認貪婪,{0,2}將嘗試匹配兩次,然後一次,然後零次 - 在這一點上,非空間的負向預測確保它實際上是一個單詞的結尾。

(如果您可能有兩個以上的換行符並希望減少到兩個,則可以使用{0,}代替*作爲快捷方式。)


這可能是值得指出的是,以上都不是會消耗任何空格/製表符 - 如果這是希望的向前看符號既可以從(?=\s)改爲\s+,你可能可以做一個與\n秒取代\n[ \t]+刪除任何前導空格/標籤或類似內容,具體取決於您要做的事情。

+0

好的,很好的解釋。但是如果下一行有一些字符和'['必須包含。如果這個規則是好的,那麼它必須被添加'\ r \ n'。你能告訴我怎麼做到這一點? – jaloplo 2009-11-02 16:34:49

+1

你的意思是你想要*避免*如果找到了'[''就添加換行符?如果是這樣,中間示例可以更新爲'\。(?= \ s ++ [^ \ [])' - 假設您的正則表達式引擎支持所有格量​​詞 - 您使用了哪種正則表達式? – 2009-11-02 16:46:53

+0

我在C#上使用它。我會測試它並告訴你它是否正常。 – jaloplo 2009-11-02 17:05:51

相關問題