2014-07-14 39 views
7

我有重複的文本行的文本文件,但我只想要每一個。 想象一下這樣的文本文件:提取所有的獨特行

AAAAA 
AAAAA 
AAAAA 
BB 
BBBBB 
BBBBB 
CCC 
CCC 
CCC 

我只需要以下四行從中:

AAAAA 
BB 
BBBBB 
CCC 

我使用文本編輯器(EmEditor中或記事本+ +),支持正則表達式,而不是一個編程語言,所以我必須使用純正則表達式。

任何幫助?

編輯: 我檢查了hsz提到的另一個線程,我想說清楚這個是不一樣的。 儘管兩者都需要刪除重複的行,但實現它的方式卻有所不同。 我需要純正RegEx,但來自其他線程的最佳答案依賴於特定的Notepad ++插件(甚至不會再有它),所以它甚至不是一個正則表達式解決方案。 那裏的第二種情況是一個正則表達式,它可以在Notepad ++上工作,但不能在EmEditor上工作,這也是我需要的。 所以我不認爲我的問題是重複那個,雖然那個鏈接是有用的,所以我感謝hsz。

+0

[在記事本中刪除重複的行++](http://stackoverflow.com/questions/3958350/removing-duplicate-rows-in-notepad) – hsz

+0

重複線組合在一起的可能重複?也就是說,該文件可以是AAAA BBBB AAAA BBBB,以便您想讓它成爲AAAA BBBB? –

+0

Gelbukh的答案:行必須與最初的順序完全相同。 –

回答

7

兩個幾乎相同的選擇:

匹配的行不重複

(?sm)(^[^\r\n]+$)(?!.*^\1$) 

直線將相匹配,但提取它們,你真的想更換其他的。

全部替換重複行

這將在記事本中更好地工作++:

搜索:(?sm)(^[^\r\n]*)[\r\n](?=.*^\1)

替換:空字符串

  • (?s)激活DOTALL模式,允許點以匹配線
  • (?m)接通多行模式,允許^$以匹配每行
  • (^[^\r\n]*)捕捉到線路到組1,即
  • ^錨斷言,我們是在字符串的開頭
  • [^\r\n]*不在換行字符
  • [\r\n]匹配換行字符
  • 先行(?!.*^\1$)斷言,我們可以匹配任何數量的C任何字符匹配然後...
  • ^\1$的同一行第1組
+0

添加了一個選項'Replace All Repeated Lines',它可以在文本編輯器中更好地工作,因爲您想要「提取」這些行。 – zx81

+0

非常感謝。您的第二個正則表達式(替換所有重複行)是我所需要的。第一個是相反的(但可能是有用的,所以讓它)。它可以在我需要的EmEditor和Notepad ++上同樣工作,但它不會刪除空行。 :(我已經嘗試添加'|^\ n $'到最後,但它什麼都沒做。如果你能幫我解決這個問題,這將是最好的答案。:) –

+0

請看修改後的答案。如果這適用於您,請考慮接受答案,方法是單擊左側的複選標記,因爲現在代表系統在網站上運行。謝謝! – zx81

0

前提是等於線組去,也就是AAAA AAAA BBBB BBBB和不AAAA BBBB AAAA BBBB,在Perl符號,以下工作:

s/(^.*$)(\r?\n\1$)*/$1/gm; 

這意味着替代/(^。$)(\ r?\ n \ 1 $)/for $ 1全球多線模式(^和$匹配內部\ n)。

此表達式意味着任何完整的行後跟任意數量的相等行被替換爲單個事件。

請參閱特定編輯器的幫助以瞭解如何應用此類正則表達式。

+0

謝謝,但這不是我請求的簡單文本編輯器。我已經嘗試過沒有最後的部分,但它仍然無法正常工作。 –

0

我不知道它可以在Notepad ++或EmEditor中工作,但可以在PHP/JavaScript/Python中使用替代工作正常工作。

^(.+)(\n(\1))*$ 

這裏是Demo

只需複製文本,並從我分享你的鏈接的最終結果。

+1

感謝您的鏈接,debuuger是有用的。然而,正則表達式需要替換任何字符而不僅僅是字母,所以它並不是我真正需要的。所以我用\替換了\ w。但現在它清除了EmEditor和Notepad ++中的所有內容,儘管它在調試器上「工作得很好」......也許它使用了不同的正則表達式標準...... –

+0

不知道爲什麼它不能在notepad ++ ++ – Braj

2

您可以使用以下正則表達式來刪除重複行和空行。

Find: ^(.*)(\r?\n\1)+$ 
Replace: \1 
+0

中工作謝謝。好的解決方案,但只適用於Notepad ++,因爲它是。我刪除了問號'?'使它在EmEditor上工作,但它只能刪除幾行。我認爲這可能是EmEditor(程序本身)的錯誤,而不是代碼的錯誤,所以我認爲這個答案是正確的。然而,由於我不得不選擇最好的一個,所以我選擇了zx81中的一個,因爲他的答案很詳細,不需要任何替換(更實用),也可以刪除原始文件中可能存在的任何空行我還需要一些東西),當然,它在兩位編輯中都是如此。 –