Многострочный поиск и замена регулярных выражений! - PullRequest
27 голосов
/ 18 сентября 2009

Я врезался в стену. Кто-нибудь знает хороший текстовый редактор, который имеет поиск и замену, как Notepad ++, но также может выполнять поиск и замену регулярных выражений в несколько строк? По сути, я пытаюсь найти что-то, что может соответствовать регулярному выражению, например:

поиск oldlog\(.*\n\s+([\r\n.]*)\);
замена newlog\(\1\)

Есть идеи?

Ответы [ 14 ]

0 голосов
/ 10 декабря 2012

Вы можете использовать последнюю версию Notepad ++ (у меня 6.2.2).

Нет необходимости использовать опцию ". Соответствовать новой строке", как это предлагается в другом ответе Вместо этого используйте соответствующее регулярное выражение с ^ для «начала строки» и $ для «конца строки». Затем используйте \ r \ n после $ для «новой строки» в файле dos (или просто \ n в файле unix, поскольку возврат каретки в основном используется для текстового файла dos / windows):

Пример: чтобы удалить все строки, начинающиеся с тегов OBJE, после строки, начинающейся с UID тега (из файла gedcom - используется в генеалогии), я использовал следующее регулярное выражение поиска:

^UID (.*)$\r\n^(OBJE (.*)$\r\n)+

И следующее значение замены:

UID \1\r\n

Это совпадает с такими строками:

UID 4FBB852FB485B2A64DE276675D57A1BA
OBJE @M4@
OBJE @M3@
OBJE @M2@
OBJE @M1@

и выходной результат замены

UID 4FBB852FB485B2A64DE276675D57A1BA

550 экземпляров были заменены менее чем за 1 сек. Блокнот ++ действительно эффективен!

В противном случае, для проверки регулярного выражения мне нравится использовать .Net RegEx Tester (http://regexhero.net/tester/). Это действительно здорово писать и тестировать на лету Reg Ex ...

PS .: Кроме того, вы можете использовать [\s\S] в своем регулярном выражении, чтобы соответствовать любому символу, включая новые строки. Таким образом, если вы ищете какой-либо блок многострочного текста, начинающийся с «xxx» и заканчивающийся «abc», будет хорошо следующее регулярное выражение: ^xxx[\s\S]*?abc$, где "*?" должно совпадать как можно меньше между xxx и abc !!!

0 голосов
/ 12 января 2011

ED for windows имеет две версии регулярных выражений, три вида вырезания и вставки (выделение, строки или блоки), и вы можете переходить от одного к другому (в отличие от ультраредактирования, которое в лучшем случае неуклюже) одним щелчком мыши в то время как вы выделяете - не нужно тянуть меню. Скорость выполнения работы просто невероятна, как при чтении на Kindle, вам не нужно об этом думать.

0 голосов
/ 18 сентября 2009

В последней версии UltraEdit имеется многострочный поиск и замена с поддержкой регулярных выражений.

Или, если вы согласны с использованием более специализированного инструмента регулярных выражений, есть Regex Hero . У этого есть побочное преимущество возможности делать все на лету. Другими словами, вам не нужно нажимать кнопку для проверки вашего регулярного выражения, потому что оно автоматически проверяется после каждого нажатия клавиши.

Лично я бы использовал UltraEdit, если хочу заменить текст в нескольких файлах. Таким образом, я могу просто выбрать файлы для замены и нажать «Заменить». Но если я работаю с одним текстовым файлом и мне нужно написать более сложное регулярное выражение, тогда я вставлю его в Regex Hero и поработаю с ним там. Это потому, что Regex Hero может сэкономить время, когда вы видите, что все происходит в режиме реального времени.

0 голосов
/ 18 сентября 2009

Вы можете использовать Visual Studio. Скачайте Express бесплатно, если у вас нет копии.

Регулярное выражение VS нестандартно, поэтому вам придется использовать \ n: b + [\ r \ n].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...