Использование регулярных выражений для массовой замены в Notepad ++ и Vim - PullRequest
31 голосов
/ 13 ноября 2008

Итак, у меня есть большой текстовый файл, который выглядит следующим образом:

<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D

Это несколько сотен строк, и я действительно не хочу делать это вручную. Выражение, которое я пытаюсь использовать:

<option value='.{1,}' >

Что работает, как и предполагалось, когда я запускаю его через несколько онлайн-тестеров регулярных выражений. Я в основном хочу удалить все до A, B, C и т. Д. Проблема в том, что, когда я пытаюсь использовать это выражение в Vim и Notepad ++, оно не может найти ничего.

Ответы [ 16 ]

63 голосов
/ 16 ноября 2010

В Notepad ++ вам не нужно использовать регулярные выражения для этого.

Удерживайте нажатой клавишу alt, чтобы выделить текст в нескольких строках одновременно. Выберите кусок, от которого хотите избавиться, и нажмите «Удалить».

30 голосов
/ 07 января 2009

В блокноте ++:

<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D


Find what: (.*)(>)(.)
Replace with: \3

Replace All


A
B
C
D
20 голосов
/ 13 ноября 2008

Все до A , B , C и т. Д.

Кажется, это так просто, что я, должно быть, неправильно тебя понимаю. Это просто

:%s/<.*>//
8 голосов
/ 13 ноября 2008

Существует очень простое решение, если я не понял проблему. Следующее регулярное выражение:

(.*)(>)(.*)

будет соответствовать шаблону, указанному в вашем сообщении.

Итак, в блокноте ++ вы найдете (.*)(>)(.*) и замените его на \3.

Регулярные выражения в основном жадные в том смысле, что если вы укажете (.*), он будет соответствовать всей строке, и вам нужно как-то разбить ее, чтобы вы могли извлечь строку, которую хотите сохранить. Здесь я сделал то же самое, и он отлично работает в Notepad ++ и Editplus3.

7 голосов
/ 13 ноября 2008

Есть две проблемы с вашим оригинальным решением. Во-первых, ваш пример текста:

<option value value='1' >A

имеет два вхождения слова «значение». Ваше регулярное выражение не делает. Кроме того, вам нужно экранировать открывающую скобку в квантификаторе вашего регулярного выражения, иначе Vim будет интерпретировать ее как буквальную скобку. Это регулярное выражение работает:

:%s/<option value value='.\{1,}' >//g
6 голосов
/ 13 ноября 2008

Это удалит тег option и просто оставит буквы в vim:

:%s/<option.*>//g
4 голосов
/ 13 ноября 2008

Может помочь, если вы менее конкретны. Ваше выражение там «жадный», который может интерпретироваться разными программами по-разному. Попробуйте это в vim:

%s/^<[^>]+>//
3 голосов
/ 29 марта 2011

В блокноте ++

Поиск

(<option value="\w\w">)\w+">(.+)

Заменить на

\1\2
3 голосов
/ 13 ноября 2008

В vim

:%s/<option value='.\{1,}' >//

или

:%s/<option value='.\+' >//

В регулярных выражениях vim вы должны экранировать один или более символов, захватывая скобки, фигурные скобки с ограниченным числом и некоторые другие.

См. :help /magic, чтобы узнать, какие специальные символы необходимо экранировать (и как это изменить).

2 голосов
/ 22 апреля 2013

Блокнот ++: режим поиска = регулярное выражение

Найти что: (. *>) (.)

Заменить на: \ 2

...