Использование регулярных выражений для массовой замены в 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 ]

2 голосов
/ 21 апреля 2010

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

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

1 голос
/ 21 января 2011

Вот хорошая статья о Блокноте ++ Регулярные выражения
http://markantoniou.blogspot.com/2008/06/notepad-how-to-use-regular-expressions.html

1 голос
/ 24 декабря 2010

Немного по факту, но в случае, если это кому-нибудь пригодится, я смог последовать одному из приведенных здесь примеров (от 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] ) [_] [AZ] [_] [AZ] [_] [AZ] [_] [AZ] ( ">) *


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


Результат: 255 случаев были заменены.

1 голос
/ 13 ноября 2008

Vim:

:% s /.*> //

1 голос
/ 13 ноября 2008

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

1,$s/^<option value value=['].['] >/
0 голосов
/ 09 мая 2016

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

<option value value=.*?>

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

...