Expressão regular para localizar abreviações

2

(Este é um spinoff de uma pergunta que fiz antes .

Estou tentando criar um RegEx para o LibreOffice Writer que encontre todas as abreviações na minha tese de doutorado. Atualmente tenho o seguinte:

\b(?:[A-Z]){2,}

Isso quase funciona, pois identifica todas as palavras que começam com mais de uma letra maiúscula. No entanto, eu tenho algumas abreviações que não pega, ou seja:

CoE RoR RoC

Idealmente, eu gostaria de um RegEx que identifique todas as palavras com pelo menos duas letras maiúsculas, embora elas não precisem estar no início da palavra . Mas estou perdida tentando criá-lo. Alguém pode me apontar na direção certa?

    
por Øby 23.02.2017 / 17:56

2 respostas

3

Eu interpretei a pergunta de forma um pouco diferente de Jim K. Supondo que todas as abreviações começam com uma letra maiúscula e contêm pelo menos mais uma letra maiúscula em qualquer lugar na palavra, você não precisa adicionar muito à sua expressão regular existente:

\b(?:[A-Z][a-z]*){2,}

Letras maiúsculas são combinadas com qualquer número de letras minúsculas, eliminando efetivamente o espaço entre as letras maiúsculas em uma palavra. Pelo menos dois desses pares significa que há pelo menos duas letras maiúsculas.

Se as abreviaturas precisarem conter pelo menos duas letras maiúsculas, mas não precisar começar com uma, adicione uma letra extra minúscula na frente da verificação da letra maiúscula:

\b(?:[a-z]*[A-Z][a-z]*){2,}

Ambos foram testados contra o texto do teste de Jim. (obrigado, Jim!)

    
por 24.02.2017 / 00:50
2

Esta expressão não encontra todas as possibilidades, mas deve encontrar as que procura:

\b(?:[A-Z]{2}[:alpha:]*)|(?:[A-Z][a-z][A-Z][:alpha:]*)

Então, para este texto:

EULEX CFSP OJ CAbc cAB cAb cab Cab CabC CFSP OJ CFSP OJ EULEX EULEX EU EU
CoE RoR RoC

Ele encontra todas as palavras, exceto cAB cAb cab Cab CabC , que eu presumo que não devam ser consideradas abreviações.

Divisão da expressão:

  • \b é o limite da palavra.
  • (?:[A-Z]{2}[:alpha:]*) aceita todas as palavras que começam com duas letras maiúsculas.
    • [:alpha:]* corresponde ao resto da palavra aceitando qualquer letra, seja superior ou inferior.
  • | "ou" tenta a próxima expressão se a primeira não corresponder.
  • (?:[A-Z][a-z][A-Z][:alpha:]*) aceita todas as palavras que começam com superior, inferior e superior.
por 23.02.2017 / 19:41