Correspondendo parágrafos html com pelo menos uma palavra em letras maiúsculas

1

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

Em seguida, transforme-o em um cabeçalho e capitalize todo o conteúdo do título. No exemplo abaixo, a palavra aqui deve ser alterada para AQUI . 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 o Linux.

    
por To Do 05.06.2013 / 19:53

1 resposta

1

Você pode quase certamente fazer isso usando comandos do console, mas isso soa como um trabalho de reparo único em vez de uma tarefa regular, então eu usaria minha ferramenta de regex gráfica favorita, o editor de texto dos programadores open source chamado jEdit. (Veja jedit.org para detalhes.)

Depois de instalar o jEdit, você pode abrir a caixa de diálogo "Pesquisar e substituir" pressionando Ctrl + F ou indo até 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. "Current buffer" mudará apenas o arquivo atual, "All buffers" irá alterar todos os arquivos atualmente abertos no jEdit, e a opção "Directory" permitirá que você altere todos os arquivos no diretório (que você especifica na parte inferior da caixa de diálogo ) que correspondem ao filtro especificado (por exemplo, *.html ou *.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 a sua pesquisa / substituição não causa alterações inesperadas ao combinar de 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 por" o regex que você deseja usar para segmentar o texto que precisa ser alterado. Se eu entendi sua exigência, esse padrão de expressão regular pode funcionar:

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

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

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

_1.toUpperCase()

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

Eu testei isso e ele corre alegremente através de um arquivo HTML que encontra seqüê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 o Reino Unido ou USB também será correspondido por este regex, portanto, talvez você queira alterar o {2,} quantifier para {4,} , para que haja pelo menos quatro caracteres maiúsculos consecutivos para um sequência a ser correspondida.

Certifique-se também de testar com muito cuidado antes de soltar isso em um valioso arquivo ou conjunto de arquivos (e certifique-se de fazer um backup de todos os originais primeiro para poder restaurá-los se as coisas derem errado e você não o fizer) notará até que você tenha salvo as alterações).

    
por 31.01.2014 / 21:50