1

Используя регулярное выражение или что-то еще, мне нужно сопоставить любой абзац, который содержит хотя бы одно слово с заглавными буквами.

Затем преобразуйте его в заголовок и используйте весь заголовок. В приведенном ниже примере слово Здесь должно быть заменено ЗДЕСЬ. Это включает в себя акцентированные символы.

Как я могу это сделать?

<P STYLE="margin-bottom: 0cm"><BR>
    </P>
</DIV>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm; line-height: 0.42cm">
<FONT SIZE=4><B>TITLE Here</B></FONT></P>

Я использую Linux.

1 ответ1

1

Вы почти наверняка можете сделать это с помощью консольных команд, но это звучит как одноразовое исправление, а не обычная рутинная работа, поэтому я бы использовал мой любимый графический инструмент регулярных выражений, очень удобный текстовый редактор с открытым исходным кодом для программистов, называемый jEdit. (См. Jedit.org для деталей.)

После установки jEdit вы можете открыть диалоговое окно "Поиск и замена", нажав Ctrl+F или перейдя в меню "Поиск" и выбрав пункт "Найти".

В диалоговом окне "Поиск и замена" необходимо выбрать параметр "Поиск в", который вы хотите использовать. "Текущий буфер" изменит только текущий файл, "Все буферы" изменит все файлы, открытые в данный момент в jEdit, а опция "Каталог" позволит вам изменить все файлы в каталоге (который вы указываете в нижней части диалогового окна ), которые соответствуют указанному вами фильтру (например, *.html или *.php ). Опция "Каталог" очень мощная, и, возможно, она вам нужна, но будьте очень осторожны с ней и очень тщательно проверяйте, не приводит ли ваш поиск / замена к неожиданным изменениям путем сопоставления способами, которые вы не рассматривали.

Далее вам нужно поставить галочку в поле "Регулярные выражения" в середине диалога.

Теперь введите в текстовое поле "Поиск" регулярное выражение, которое вы хотите использовать для нацеливания текста, который необходимо изменить. Если я понимаю ваше требование, этот шаблон регулярных выражений может сделать работу:

(?<=>)([^<]*\p{Lu}{2,}[^<]*)(?=<)(?!</script)

Этот шаблон говорит «выберите текст, которому предшествует > и который содержит любое количество символов, которые не являются < по крайней мере, два последовательных символа в верхнем регистре, затем любое количество символов, которые не являются < и за которыми, наконец, следует < но НЕ автором </script ".

Затем вам нужно выбрать опцию "Возвращаемое значение фрагмента BeanShell" и ввести в текстовое поле "Заменить":

_1.toUpperCase()

Этот фрагмент BeanShell просто говорит «текст, захваченный в первой группе захвата, сопоставленный с регулярным выражением, преобразованный в верхний регистр».

Я протестировал это, и он с радостью просматривает HTML-файл, находя последовательные последовательности необработанного текста, которые содержат два или более последовательных символа в верхнем регистре. Имейте в виду, что этому регулярному выражению также будет соответствовать любой абзац, содержащий что-то невинное, например, UK или USB, поэтому вы можете изменить квантификатор {2,} на {4,} чтобы в нем было по крайней мере четыре последовательных символа в верхнем регистре. для последовательности, которая должна быть сопоставлена.

Также убедитесь, что вы очень тщательно протестировали, прежде чем использовать это для ценного файла или набора файлов (и убедитесь, что вы сначала сделали резервную копию всех оригиналов, чтобы вы могли восстановить их, если что-то пойдет не так, и вы не заметите, пока вы сохранили изменения).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .