Correspondência de parágrafos HTML com pelo menos uma palavra em maiúsculas

Correspondência de parágrafos HTML com pelo menos uma palavra em maiúsculas

Usando regex ou qualquer coisa, preciso corresponder a qualquer parágrafo que contenha pelo menos uma palavra em maiúsculas.

Em seguida, transforme-o em um cabeçalho e coloque todo o conteúdo do título em maiúscula. No exemplo abaixo, a palavraAquideveria ser alterado paraAQUI. Isso inclui caracteres acentuados.

Como posso fazer isso?

<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>

Estou usando Linux.

Responder1

É quase certo que você pode fazer isso usando comandos do console, mas parece um trabalho de reparo único, em vez de uma tarefa normal, então eu usaria minha ferramenta gráfica regex favorita, o editor de texto de código aberto muito útil para programadores chamado jEdit. (Verjedit.orgpara detalhes.)

Depois de instalar o jEdit, você pode abrir a caixa de diálogo "Pesquisar e Substituir" pressionando Ctrl + F ou acessando o menu "Pesquisar" e selecionando o item "Localizar".

Na caixa de diálogo "Pesquisar e Substituir", você precisa selecionar a opção "Pesquisar em" que deseja usar. "Buffer atual" alterará apenas o arquivo atual, "Todos os buffers" alterará todos os arquivos atualmente abertos no jEdit e a opção "Diretório" permitirá alterar todos os arquivos no diretório (que você especifica na parte inferior da caixa de diálogo ) que correspondem ao filtro especificado (como *.htmlou *.php). A opção "Diretório" é muito poderosa e possivelmente é a opção que você precisa, mas tenha muito cuidado com ela e verifique com muito cuidado se sua pesquisa/substituição não causa alterações inesperadas ao combinar maneiras que você não considerou.

Em seguida, você precisa marcar a caixa "Expressões regulares" no meio da caixa de diálogo.

Agora digite na caixa de texto "Pesquisar" o regex que deseja usar para direcionar o texto que precisa ser alterado. Se eu entender sua necessidade, esse padrão regex pode resolver o problema:

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

Este padrão diz "selecione o texto que é precedido por a >e que contém qualquer número de caracteres que não sejam <pelo menos dois caracteres maiúsculos consecutivos, então qualquer número de caracteres que não sejam <e que seja finalmente seguido por a <mas NÃO por </script".

Então você precisa selecionar a opção "Valor de retorno de um snippet BeanShell" e digitar na caixa de texto "Substituir por":

_1.toUpperCase()

Este trecho do BeanShell diz apenas "o texto capturado no primeiro grupo de captura correspondido pela regex, convertido em maiúsculas".

Eu testei isso e ele é executado em um arquivo HTML, encontrando sequências consecutivas de texto bruto que contêm dois ou mais caracteres maiúsculos consecutivos. Esteja ciente de que qualquer parágrafo que contenha algo inocente como UK ou USB também será correspondido por este regex, então você pode querer alterar o {2,}quantificador para {4,}que haja pelo menos quatro caracteres maiúsculos consecutivos para que uma sequência seja correspondida.

Além disso, certifique-se de testar com muito cuidado antes de liberar isso em um arquivo ou conjunto de arquivos valioso (e certifique-se de ter feito um backup de todos os originais primeiro para poder restaurá-los se algo der errado e você não perceber até você salvou as alterações).

informação relacionada