2017-02-21 87 views
4

我有新行文字,像這樣:如何刪除記事本++上的每一行?

tom 
tim 
john 
will 
tod 
hello 
test 
ttt 
three 

我想刪除每第三行,以便使用上面的例子我想刪除:john,hello,three

我知道這需要一些正則表達式,但我我不是最好的!

我試了一下:

Search: ([^\n]*\n?){3} //3 in my head to remove every third 
Replace: $1 

我試過其他的人只是\n\r等試圖再次,不是最好的正則表達式。我認爲上述嘗試有點緊密​​。

+2

分享你的研究可以幫助每個人。告訴我們你試過了什麼,以及它爲什麼不符合你的需求。這表明你已經花時間去嘗試幫助自己,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案!另見:[問] –

+1

爲我工作。我在Ubuntu上使用gedit。我用'(。*?)\ n(。*?)\ n(。*)\ n'進行搜索,並用'\ 1 \ n \ 2 \ n'代替。 –

回答

6

的gedit ubuntu的

搜索:(.*?)\n(.*?)\n(.*)\n
替換:\1\n\2\n

3
  • 按Ctrl + H^
  • 查找內容:$1
  • ((?:[^\r\n]+\R){2})[^\r\n]+\R
  • 與更換
  • 更換所有

說明:

(    : Start group 1 
    (?:   : start non capture group 
    [^\r\n]+ : 1 or more NON linebreak 
    \R   : linebreak (\n or \r or \r\n) 
){2}   : repeated twice 
)    : end group 1, it contains 2 lines 
[^\r\n]+  : 1 or more NON linebreak 
\R    : linebreak (\n or \r or \r\n) 

結果對於給定的例子:

tom 
tim 
will 
tod 
test 
ttt 
+0

喜歡解釋!謝謝。 +1 – irishwill200

1

由於OP說,薩赫勒的回答 「工作就像一個魅力」 我假設記事本++中的文本以換行符結束呃。否則,Sahil和Toto的答案將無法與最終的單詞匹配。

薩赫勒的圖案:(.*?)\n(.*?)\n(.*)\n需要79步驟 *如果文本中\n結束;否則112步驟並失敗。
他的替換表達式不必要地使用兩個捕獲組引用。

託託的模式:((?:[^\r\n]+\R){2})[^\r\n]+\R需要39步驟 *如果文本中\n結束;否則173步驟並失敗。 他的替換表達式使用一個捕獲組引用。

我建議的模式只需要25個步驟並且不使用捕獲組。 您的文字是其次是白字符的一系列非白色字符,所以下面是最短的,最準確的方式提供最高速度:

\S+\s+\S+\s+\K\S+\s* 

這種模式應與空配對替代。

\S意味着「非空白字符」
\s指「空白字符」
+指一個或多個前面的匹配的
*意味着零個或多個先前匹配的
\K裝置保持從這裏開始的比賽

*最後的\s允許最後的3行文本結束而沒有尾隨的換行符。對大批文本進行這種操作時,務必確保替換文字在整個文本上正常工作,並且不存在不需要的子字符串。

雖然我確定你很久以前就已經忘記了這個正則表達式的任務,但重要的是未來的讀者可以從學習獲得理想結果的最佳方式中受益。

+0

感謝您的輸入! – irishwill200