2017-02-21 9 views
4

У меня есть текст на новых линиях, как так:Как удалить каждую третью строку в Notepad ++?

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

Работал для меня. Я использую gedit на ubuntu. Я искал с помощью '(. *?) \ N (. *?) \ N (. *) \ N' и заменил его на' \ 1 \ n \ 2 \ n' –

ответ

6

Gedit убунту

Поиск: (.*?)\n(.*?)\n(.*)\n
Заменить: \1\n\2\n

3
  • Ctrl + H
  • Найти: ((?:[^\r\n]+\R){2})[^\r\n]+\R
  • Заменить: $1
  • Заменить все

Объяснение:

(    : 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 говорит ответ Сахил в "работал как шарм" Я Предположим, что текст в блокноте ++ закончился символом новой строки э. В противном случае ответы Сахиля и Тото не будут соответствовать окончательному набору слов.

Сахил по схеме: (.*?)\n(.*?)\n(.*)\n принимает 79 шагов * если текст заканчивается в \n; в противном случае 112 шагов и не выполняется.
Его заменяющее выражение бесполезно использует две ссылки группы захвата.

Фотография Toto: ((?:[^\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