Поиск начала строки с помощью регулярного выражения

Поиск начала строки с использованием регулярного выражения в Notepad++

Я хочу удалить 4000-строчный HTML-файл из всех атрибутов jQuery done в div.

<DIV class=menu done27="1" done26="0"
done9="1" done8="0" done7="1"
done6="0" done4="20">

следует заменить на:

<DIV class=menu>

В этом эксперименте я могу сделать это с помощью этого регулярного выражения:

[ ^]done[0-9]+="[0-9]+"

Используя Notepad++ 5.6.8 Unicode с файлом, закодированным в ANSI, я помещаю это регулярное выражение в поле «Найти». Он заменяет только 5 вхождений, начинающихся с пробела, он пропустит 2 вхождения, начинающихся в начале строки.

Как я могу создать регулярное выражение для удаления всех атрибутов элемента HTML, начиная с ключевого слова?


person Michel Merlin    schedule 21.04.2010    source источник
comment
Каждый вопрос, связанный с программированием, действителен в stackoverflow. Никто не будет обвинять вас в том, что вы чего-то не знаете, или называть вас новичком. Худшие вопросы — это вопросы, которые не заданы   -  person Ivo    schedule 21.04.2010
comment
Возможно, вам следует переименовать свой вопрос, чтобы отразить, что у вас есть проблемы с шаблоном регулярного выражения, соответствующим многострочным выражениям.   -  person das_weezul    schedule 21.04.2010
comment
Использование ^ сработало для меня   -  person Hamman Samuel    schedule 09.07.2020


Ответы (5)


Расширенная замена "\n" на "LINEBREAK"

Большое спасибо всем за эти своевременные ответы. Следуя вашим советам, вот что я сделал:

  • "Notepad++ > Вид > Показать символ > Показать конец строки" показывает "CR+LF" в конце каждой строки.
  • "Notepad++ > Поиск > Найти", "Режим поиска" = "Обычный", убедитесь, что "Найти что" = "LINEBREAK" ничего не находит.
  • "Режим поиска" = "Расширенный", "Найти что" = "\n\r" находит только двойные разрывы (CR + LF + пустая строка); "\n\r" ничего не найти; тем не менее, "\n" находит ровно все разрывы строк и только их.
  • Сохранение моего тестового файла "Towncar.htm" как "Towncar_02.htm" (также в кодировке ANSI)
  • В разделе "Расширенные" заменены все "\n" на "LINEBREAK " (обратите внимание на пробел в конце)
  • В разделе «Регулярное выражение» заменено каждое вхождение:

     done[0-9]*="[0-9]*"
    

(Обязательно проверьте наличие ПРОБЕЛА ЗАГОЛОВКА перед словом "done"
и НЕТ ПРОБЕЛА В ЗАКОНЕЧНОМ ПРОБЕЛЕ! см. ниже)

с пустой строкой

  • В разделе «Расширенный» заменено каждое вхождение «LINEBREAK» на «\n» (на этот раз без пробела после «LINEBREAK»!)
  • Проверено, что получившийся файл "Towncar.htm" (после косметического переформатирования) выглядит нормально и красиво, и что после обновления он по-прежнему отображается так же, как резервная копия "Towncar_02.htm".

Отзывы и примечания:

  • Этот форум, по-видимому, хорошо работает в Chrome 4; но с некоторыми браузерами (например, IE6 и другими, устаревшими) при некоторых обстоятельствах это вызывает некоторые артефакты; так что будьте осторожны:
  • даже если форум не показывает его в вашем браузере, есть пробел в заголовке, то есть в начале регулярного выражения (" done..." Регулярное выражение выше) и внутри его, чтобы заменить только строки, начинающиеся с " done ", начальным пробелом, тем самым еще больше гарантируя НЕ изменять возможные другие строки с «отменено» или «метадон» или что-то еще
  • Точно так же, даже если форум показывает его в вашем браузере, в конце регулярного выражения нет пробела!
  • в регулярном выражении [0-9] соответствует 1 и только 1 вхождению любой десятичной цифры (символы в диапазоне 0-9); IOW это соответствует «0» или «1» или «9» и т.д., но НЕ «01» или «835» или «» (пустая строка) или тому другому.
  • * (звездочка) соответствует 0 или более раз предыдущему символу (здесь он соответствует пустой строке или любой строке, состоящей исключительно из цифр)
  • аналогичным образом + (знак плюс) соответствует 1 или более раз предыдущему символу (здесь он соответствует любой строке длиной не менее 1 символа, состоящей исключительно из цифр)
    Ссылка: http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions#Notepad.2B.2B_regex_syntax
person Michel Merlin    schedule 21.04.2010
comment
Вау !, это очень хорошо написанный и подробный ответ, впечатляет! Я проголосовал и за вопрос, и за ответ. - person YOU; 21.04.2010

Мне тоже нравится Notepad++, но регулярное выражение — это действительно боль. Если вы настаиваете на использовании Notepad++, попробуйте следующее:

  • Сначала выясните, какие символы новой строки используются в вашем документе (Вид> Показать символ> Показать конец строки).
  • Удалите эти разрывы строк, заменив их одним пробелом (Поиск и замена. CR — это \r LF — это \n. Обязательно отметьте «Расширенный» режим поиска)
  • Regex-замените done[0-9][0-9]*=\"[0-9][0-9]*\" пустой строкой (не забудьте поставить один пробел перед выражением регулярного выражения)

Вуаля! Не очень красиво и чисто, но работает ;о)

После этого, если вы хотите, чтобы он снова был удобочитаемым, вы можете использовать функции HTMLTidy

person das_weezul    schedule 21.04.2010

Простой способ:

  1. Перейти к «Поиск» и «Заменить»
  2. Введите «\n» в «Найти что»
  3. Введите строку в поле «Заменить на»
  4. Выберите «Расширенный» в «Режиме поиска».
  5. Нажмите «Заменить все»

Он будет подключать вашу строку в начале каждой строки, кроме первой строки.

person John    schedule 18.02.2014

Боюсь, Notepad++ Regex не может этого сделать.

Notepad ++ использует механизм регулярных выражений Scintilla, основанный на строке, поэтому многострочный поиск/замена не может быть выполнен.

Обратите внимание, что \r и \n никогда не совпадают, потому что в Scintilla поиск по регулярному выражению выполняется построчно (без символов конца строки).

Цитата из http://www.scintilla.org/SciTERegEx.html

person YOU    schedule 21.04.2010

У тебя почти получилось! К сожалению, полное решение в Notepad++ должно состоять из трех шагов.

  1. Поиск/замена регулярных выражений со следующим поиском: \<done[0-9]+="[0-9]+"[ ]* Конечно, оставьте поле замены пустым, чтобы оно просто удалило все, что соответствует. (В Notepad++ понимание регулярных выражений \< представляет собой «начало слова».)

  2. Выберите часть текста, затронутую вашим предыдущим поиском/заменой. Вы не хотите выделять весь документ, потому что мы собираемся...

  3. Удалить новые строки. Нажмите Ctrl-F, чтобы снова открыть диалоговое окно поиска/замены, и на этот раз выберите «Расширенный» режим поиска вместо «Регулярное выражение». В зависимости от формата вашего документа вам нужно искать либо \n, либо \r\n. Поле замены снова должно быть пустым. Также убедитесь, что установлен флажок «В выделении».

Нажмите «Заменить все», и все готово!

person kurige    schedule 21.04.2010