Подтвердить что ты не робот

Использование регулярных выражений для массового замещения в Notepad ++ и Vim

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

<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 ++, он, похоже, ничего не может найти.

4b9b3361

Ответ 1

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

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

:%s/<.*>//

Ответ 2

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

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

Ответ 3

В Notepad ++:

<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

Ответ 4

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

(.*)(>)(.*)

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

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

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

Ответ 5

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

<option value value='1' >A

имеет два вхождения слова "значение". У вашего регулярного выражения нет. Кроме того, вам нужно избежать открытия скобки в кванторе вашего регулярного выражения, или Vim будет интерпретировать его как литерал. Это регулярное выражение работает:

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

Ответ 6

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

:%s/<option.*>//g

Ответ 7

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

%s/^<[^>]+>//

Ответ 8

В vim

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

или

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

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

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

Ответ 9

В блокноте ++

Поиск

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

Заменить

\1\2

Ответ 10

Имея ту же проблему (с строками jQuery "done..." ), но только в Notepad ++, я спросил, получил хорошие дружеские ответы (что заставило меня понять, что я пропустил), а затем потратил время на создание подробного пошаговое объяснение, см. Поиск строки Начало с использованием регулярного выражения в Notepad ++

Версаль, вт 27 апр 2010 22:53:25 +0200

Ответ 11

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

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

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

Ответ 12

Это сработает. Протестировал это в моем vim. одиночные кавычки - проблема.

1,$s/^<option value value=['].['] >/

Ответ 13

Vim:

:% s/.* > //

Ответ 14

Немного по факту, но в случае, если это полезно для всех, я смог выполнить один из примеров здесь (по sdgfsdg) и быстро подобрать регулярные выражения для Notepad ++.

Мне пришлось аналогичным образом вытащить некоторые избыточные данные из списка вариантов выпадающего списка HTML, в форме:

<select>
  <option value="AC">saint_helena">Ascension Island</option>
  <option value="AD">andorra">Andorra</option>
  <option value="AE">united_arab_emirates">United Arab Emirates</option>
  <option value="AF">afghanistan">Afghanistan</option>:
  ...
</select>

И я действительно хотел:

<select>
  <option value="AC">Ascension Island</option>
  <option value="AD">Andorra</option>
  <option value="AE">United Arab Emirates</option>
  <option value="AF">Afghanistan</option>
  ...
</select>

После некоторого вытягивания волос я понял, что с версии 5.8.5 (сентябрь 2010 г.) регулярные выражения, похоже, не разрешают определенные циклы в выражениях (если только не существует другого синтаксиса), например, следующие найдет даже " > united_arab_emirated_emirates" > , несмотря на его дополнительные разделительные символы подчеркивания:

(">)([a-z]+([_]*[a-z]*)*)(">)

Этот запрос работал в большинстве общих инструментов RegEx, но в то время как внутри Notepad ++ мне приходилось учитывать максимальное количество вложенных подчеркиваний (что, к сожалению, было 8) вручную, используя гораздо более уродливый:

(">)([a-z]+[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*)[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*(">)

Если кто-то знает способ имитации цикла Regex в функции замены Notepad ++, сообщите мне.


Найти что: * ( " > ) ([az] + [_] [az] [_] [az] [_] [az] [_] [az]) [_ ] [аз] [_] [аз] [_] [аз] [_] [аз] (" > ) *


Заменить на:" >


Результат: Было заменено 255 экземпляров.

Ответ 16

Очень просто Найти:

<option value value=.*?>

и нажмите "Заменить"