Используя регулярное выражение или что-то еще, мне нужно найти любой абзац, содержащий хотя бы одно слово, написанное заглавными буквами.
Затем преобразуйте его в заголовок и напишите все содержимое заголовка заглавными буквами. В примере ниже словоЗдесьследует изменить наЗДЕСЬ. Это касается и символов с ударением.
Как я могу это сделать?
<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,}
, чтобы для сопоставления последовательности должно было быть не менее четырех последовательных заглавных символов.
Также обязательно тщательно протестируйте, прежде чем применить это к ценному файлу или набору файлов (и убедитесь, что вы сначала сделали резервную копию всех оригиналов, чтобы вы могли восстановить их, если что-то пойдет не так, и вы не заметите этого, пока не сохраните изменения).