Сопоставление абзацев HTML, содержащих хотя бы одно слово заглавными буквами

Сопоставление абзацев HTML, содержащих хотя бы одно слово заглавными буквами

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

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

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

<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

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

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

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

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

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

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

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

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

_1.toUpperCase()

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

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

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

Связанный контент