Поиск и замена многострочного регулярного выражения!
Я ударил стену. Кто-нибудь знает хороший текстовый редактор, который имеет поиск и замену, как Notepad ++, но также может выполнять поиск и замену регулярных выражений многострочным? В основном, я пытаюсь найти что-то, что может соответствовать регулярному выражению, например:
search oldlog\(.*\n\s+([\r\n.]*)\);
заменить newlog\(\1\)
Любые идеи?
Ответы
Ответ 1
Мои личные рекомендации - IDM Computing UltraEdit (www.ultraedit.com) - он может выполнять регулярные выражения (как поиск, так и замену) с помощью Perl, Синтаксис Unix и UltraEdit. Многострочное сопоставление является одной из возможностей в режиме регулярного выражения Perl.
Он также имеет другие приятные возможности поиска (например, поиск в определенном диапазоне столбцов символов, поиск в нескольких файлах, история поиска, поиск в избранное и т.д.)
alt text http://www.ultraedit.com/assets/images/new_features/ue_1500/searchincolumn.png
Ответ 2
Notepad ++ теперь может обрабатывать многострочные регулярные выражения (только обновление до последней версии - функция была введена в марте 12).
Мне нужно было удалить все операторы onmouseout и onmouseover из HTML-документа, и мне нужно было создать не-жадное многострочное соответствие.
onmouseover=.?\s*".*?"
Убедитесь, что вы установите флажок:
[ ] . matches newline
, если хотите использовать возможность многострочного совпадения.
Ответ 3
EditPad Pro имеет лучшие возможности регулярного выражения, чем любой другой редактор, который я когда-либо использовал.
Кроме того, я подозреваю, что у вас есть ошибка в вашем регулярном выражении - [\r\n.]
будет соответствовать только возврату каретки, новым линиям и полным остановкам. Если вы пытаетесь сопоставить любой символ (т.е. "Оператор точки плюс CR и LF" ), попробуйте [\s\S]
.
Ответ 4
Я использую Eclipse, который является бесплатным и может быть у вас уже есть, если вы разработчик. '\ R' выступает в качестве независимого от линии разделителя строк. Ниже приведен пример многострочного поиска:
Поиск:
\ RBibitem. (\ R.)?\R? {([^ {])} $\ R ^ ([^ \]. [^}] $\ R. $\ R.)
и замените:
\ defcitealias {$ 2} {3} $
Ответ 5
Я уверен, что Notepad ++ может сделать это теперь через плагин TextFX (который включен по умолчанию). Hit Control-R в Notepad ++ и играйте.
Ответ 6
TextPad имеет хорошие возможности поиска и замены Regex; Я использовал его некоторое время, и я очень доволен этим.
Снимок экрана TextPad http://i31.tinypic.com/2bb22q.png
Из Features:
Мощный поиск/замена двигателя с использованием Регулярные выражения в стиле UNIX, с власть макросов редактора. Наборы файлы в дереве каталогов могут быть поиск, а текст можно заменить в все открытые документы сразу.
Для большего количества опций, чем вам может понадобиться, проверьте Альтернативы Notepad ++ на AlternativeTo.net.
Ответ 7
Редактор Zeus может выполнять многострочный поиск и замену.
Ответ 8
вы можете использовать плагин Python Script для поиска и замены многострочного регулярного выражения!
- http://npppythonscript.sourceforge.net/docs/latest/scintilla.html?highlight=pymlreplace#Editor.pymlreplace
# This example replaces any <br/> that is followed by another on the next line (with optional spaces in between), with a single one
editor.pymlreplace(r"<br/>\s*\r\n\s*<br/>", "<br/>\r\n")
Ответ 9
Я использую Notepad ++ все время, но Regex всегда немного не хватает.
Sublime Text - это то, что вы хотите.
Ответ 10
EditPlus отлично справляется с поиском/заменой с помощью регулярного выражения (в том числе многострочного)
Ответ 11
Вы можете использовать Visual Studio. Скачайте Express бесплатно, если у вас нет копии.
VS regex является нестандартным, поэтому вам придется использовать \n: b + [\ r\n].
Ответ 12
В последней версии UltraEdit есть многострочный поиск и замена w/regex.
Или, если вы в порядке с использованием более специализированного инструмента регулярного выражения для этого, Regex Hero. У него есть преимущество в том, что он может все делать "на лету". Другими словами, вам не нужно нажимать кнопку, чтобы проверить ваше регулярное выражение, потому что оно автоматически проверяется после каждого нажатия клавиши.
Лично я использую UltraEdit, если я хочу заменить текст в нескольких файлах. Таким образом, я могу просто выбрать файлы для замены в качестве пакета и нажать "Заменить". Но если я работаю с одним текстовым файлом, и мне нужно написать более сложное регулярное выражение, я вставляю его в Regex Hero и работаю с ним там. Это потому, что Regex Hero может сэкономить время, когда вы видите, что все происходит в режиме реального времени.
Ответ 13
ED for windows
имеет две версии регулярных выражений: три вида вырезания и вставки (выбор, строки или блоки), и вы можете переходить от одного к другому (в отличие от ультраредактирования, которое в лучшем случае неудобно) простым щелчком мыши в то время как вы выделяете - нет необходимости вытаскивать меню. Исключительная скорость выполнения работы невероятна, например, чтение на Kindle, вам не нужно об этом думать.
Ответ 14
Вы можете использовать последнюю версию Notepad ++ (Mine is 6.2.2).
Не нужно использовать параметр ". match newline", как это предлагается в другом ответе. Вместо этого используйте адекватное регулярное выражение с помощью ^ для "начала строки" и $для "конца строки". Затем используйте \r\n после $для новой строки в файле dos (или просто \n в unix файле, поскольку возврат каретки в основном используется для текстового файла dos/windows):
Пример: удалить все строки, начинающиеся с тегов OBJE после строки, начинающейся с идентификатора тега (из файла gedcom - используется в генеалогии), я использовал следующее регулярное выражение поиска:
^UID (.*)$\r\n^(OBJE (.*)$\r\n)+
И следующее значение замены:
UID \1\r\n
Это соответствующие строки:
UID 4FBB852FB485B2A64DE276675D57A1BA
OBJE @[email protected]
OBJE @[email protected]
OBJE @[email protected]
OBJE @[email protected]
а выход замены -
UID 4FBB852FB485B2A64DE276675D57A1BA
550 экземпляров были заменены менее чем за 1 секунду. Notepad ++ действительно эффективен!
В противном случае, чтобы проверить регулярное выражение, мне нравится использовать .Net RegEx Tester (http://regexhero.net/tester/). Это действительно здорово писать и проверять на лету Reg Ex...
PS: Кроме того, вы можете использовать [\s\S]
в своем регулярном выражении, чтобы соответствовать любому персонажу, включая новые строки. Итак, если вы ищете любой блок "многострочного" текста, начинающийся с "xxx" и заканчивающийся на "abc", следующее Regex будет в порядке: ^xxx[\s\S]*?abc$
, где "*?"
должно соответствовать как можно меньше между xxx и abc!!!