Ответ 1
Все до A, B, C и т.д.
Это кажется таким простым, что я должен неверно истолковать вас. Это просто
:%s/<.*>//
Итак, у меня есть большой текстовый файл, который выглядит следующим образом:
<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 ++, он, похоже, ничего не может найти.
Все до A, B, C и т.д.
Это кажется таким простым, что я должен неверно истолковать вас. Это просто
:%s/<.*>//
В Notepad ++ вам не нужно использовать регулярные выражения для этого.
Удерживайте нажатой клавишу alt, чтобы вы могли выбрать прямоугольник текста через несколько строк одновременно. Выберите фрагмент, из которого вы хотите избавиться, и нажмите "Удалить".
В 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
Это очень простое решение, если я не понял проблему. Следующее регулярное выражение:
(.*)(>)(.*)
будет соответствовать шаблону, указанному в вашем сообщении.
Итак, в блокноте ++ вы найдете (.*)(>)(.*)
и замените его на \3
.
Регулярные выражения в основном жадные в том смысле, что если вы укажете (.*)
, он будет соответствовать всей строке, и то, что вы хотите сделать, это как-нибудь сломать ее, чтобы вы могли извлечь строку, которую хотите сохранить. Здесь я сделал то же самое, и он отлично работает в Notepad ++ и Editplus3.
Есть две проблемы с вашим оригинальным решением. Во-первых, ваш пример текста:
<option value value='1' >A
имеет два вхождения слова "значение". У вашего регулярного выражения нет. Кроме того, вам нужно избежать открытия скобки в кванторе вашего регулярного выражения, или Vim будет интерпретировать его как литерал. Это регулярное выражение работает:
:%s/<option value value='.\{1,}' >//g
Это приведет к удалению тега option
и просто оставьте буквы в vim:
:%s/<option.*>//g
Это может помочь, если вы менее конкретны. Ваше выражение есть "жадный", который может быть интерпретирован различными способами различными программами. Попробуйте это в vim:
%s/^<[^>]+>//
В vim
:%s/<option value='.\{1,}' >//
или
:%s/<option value='.\+' >//
В регулярных выражениях vim вам нужно избегать символа "один или более", фиксируя круглые скобки, ограниченное число фигурных скобок и некоторые другие.
См. :help /magic
, чтобы увидеть, какие специальные символы нужно экранировать (и как это изменить).
В блокноте ++
Поиск
(<option value="\w\w">)\w+">(.+)
Заменить
\1\2
Имея ту же проблему (с строками jQuery "done..." ), но только в Notepad ++, я спросил, получил хорошие дружеские ответы (что заставило меня понять, что я пропустил), а затем потратил время на создание подробного пошаговое объяснение, см. Поиск строки Начало с использованием регулярного выражения в Notepad ++
Версаль, вт 27 апр 2010 22:53:25 +0200
Блокнот ++: Режим поиска = Регулярное выражение
Найдите то, что: (. * > ) (.)
Заменить на:\2
Это сработает. Протестировал это в моем vim. одиночные кавычки - проблема.
1,$s/^<option value value=['].['] >/
Vim:
:% s/.* > //
Немного по факту, но в случае, если это полезно для всех, я смог выполнить один из примеров здесь (по 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 ++, сообщите мне.
Здесь хорошая статья о регулярных выражениях Notepad ++
http://markantoniou.blogspot.com/2008/06/notepad-how-to-use-regular-expressions.html
Очень просто Найти:
<option value value=.*?>
и нажмите "Заменить"