Как выбрать весь код между комментариями с помощью Notepad ++ (regex) - PullRequest
2 голосов
/ 02 ноября 2010

Я пытаюсь выбрать блок кода между двумя тегами комментариев, например так:

<!-- begin answers -->
   ...[code]
<!-- end answers -->

Я пробовал что-то вроде <!-- begin answers -->.*<!-- end answers -->, но мои знания регулярных выражений довольно ограничены.Мои знания о поиске и замене Notepad ++ также очень ограничены, но причина, по которой я его использую, заключается в том, что опция «Заменить через открытые файлы» считается очень полезной.Причина этого в том, что я выполняю поиск / замену примерно 4000 файлов.

Код между этими комментариями может несколько отличаться (пробелы, пробелы), поэтому мне нужно что-то более гибкое для его обработки.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 02 ноября 2010

Регулярное выражение, которое вы пробовали, должно работать, но, к сожалению, движок регулярных выражений, который использует Notepad ++ (Scintilla), не может совпадать с новыми строками. Так что нет способа сделать это. Это ограничение задокументировано здесь . Также он поддерживает только очень простые выражения. И вы не можете выбрать только текст между комментариями (без выбора также комментариев), потому что предварительные и предварительные утверждения не поддерживаются.

1 голос
/ 02 октября 2013

Вы можете использовать, поскольку Notepad ++ v ~ 6.0 +:

search what: (?<=<!-- begin answers -->\r?\n).*?(?=<!-- end answers -->)

Это выделит весь код от <!-- begin answers -->\r?\n до <!-- end answers -->

Убедитесь, что у вас есть галочка Regular Expression и dot match newline

0 голосов
/ 02 июня 2014

Использование приведенного ниже в функции «Найти и заменить» ( Регулярное выражение и . Соответствия новой строки выделено) работает для меня:

<!-- begin answers -->(.*?)<!-- end answers -->
0 голосов
/ 03 ноября 2010

YWE совершенно верно, почему ваше регулярное выражение не работает должным образом;+1 к нему.

Смотрите код ниже, чтобы понять, как легко сделать что-то подобное в Python.Пожалуйста, обратите внимание, что это работает с одним файлом, но вы можете легко изменить поиск и заменить каталог файлов.1012 * от А.М. Кучлинга

0 голосов
/ 02 ноября 2010

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

xml.IndexOfAny("<!-- begin answers -->".ToCharArray(), 0, xml.Count());
xml.IndexOfAny("<!-- end answers -->".ToCharArray(), 0, xml.Count());

Как только вы знаете индексы, вы можете использовать SubString, чтобы найти, что между ними. Вам придется поиграться с индексированием начала и конца, чтобы найти именно то, что находится между ними. Код выше написан на C #, но в Java есть эквивалентный API.

...