Поиск строки, начинающейся с использованием регулярного выражения - PullRequest
15 голосов
/ 21 апреля 2010

Поиск строки, начинающейся с использования регулярного выражения в Блокноте ++

Я хочу убрать 4000-строчный HTML-файл из всех атрибутов "done" в jQuery в 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 Юникод с файлом, закодированным в ANSI, я помещаю это регулярное выражение в поле «Найти что». Он заменяет только 5 вхождений, начинающихся с пробела, и пропускает 2 вхождения, начинающихся в начале строки.

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

Ответы [ 5 ]

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

Расширенная Заменить "\ n" на "LINEBREAK"

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

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

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

( Будьте внимательны, чтобы проверить, есть ли ЗАГОЛОВОК ПРОСТРАНСТВА, прежде чем "сделано"
и нет пробела! см. Ниже)

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

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

Напоминает и отмечает:

  • Этот форум, видимо, хорошо работает в Chrome 4; но в некоторых браузерах (например, IE6 и в других закрытых) при некоторых обстоятельствах это вызывает некоторые артефакты; так что будьте осторожны:
  • , даже если форум не показывает его в вашем браузере, является пробелом, то есть в начале регулярного выражения (the " done ... "Регулярное выражение выше) и внутри it, так что вместо only строк, начинающихся с" done ", начальным пробелом, таким образом, даже гарантированно НЕ изменяя возможное другое строки с "отменено" или "метадон" или иначе
  • Точно так же, даже если на форуме это отображается в вашем браузере, в конце Regex нет пробела !
  • в регулярном выражении [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
1 голос
/ 19 февраля 2014

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Цитируется из http://www.scintilla.org/SciTERegEx.html

...