Expression régulière pour trouver des abréviations

2

(Ceci est une retombée de une question que j'ai posée plus tôt .)

J'essaie d'élaborer un RegEx pour LibreOffice Writer qui trouve toutes les abréviations dans ma thèse. Actuellement, j'ai les éléments suivants:

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

Cela fait presque l'affaire, car il identifie tous les mots commençant par plus d'une lettre majuscule. Cependant, j'ai quelques abréviations qu'il ne comprend pas, à savoir:

CoE RoR RoC

Idéalement, je voudrais un RegEx qui identifie tous les mots avec au moins deux lettres majuscules, bien qu'ils ne soient pas obligatoirement au début du mot . Mais je suis à court d'essayer de le créer. Est-ce que quelqu'un peut-il me montrer la bonne direction?

Øby
la source

Réponses:

3

J’ai interprété la question un peu différemment de Jim K. En supposant que toutes les abréviations commencent par une lettre majuscule et contiennent au moins une lettre majuscule nulle part dans le mot, vous n'avez pas besoin d'ajouter grand chose à votre expression régulière existante:

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

Les majuscules sont associées à un nombre quelconque de minuscules, ce qui élimine efficacement l'espace entre les majuscules d'un mot. Au moins deux de ces paires signifie qu'il y a au moins deux lettres majuscules.

Si les abréviations doivent contenir au moins deux lettres majuscules mais ne doivent pas obligatoirement commencer par une, ajoutez un chèque en minuscule supplémentaire devant le chèque en majuscule:

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

Les deux ont été testés par rapport au texte de test de Jim. (merci, Jim!)

jkmartindale
la source
Désolé pour la réponse tardive, mais je voulais d’abord la tester sur ma thèse. Heureux de vous annoncer que cela a fonctionné parfaitement!
Øby
2

Cette expression ne trouve pas toutes les possibilités, mais devrait trouver celles que vous recherchez:

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

Donc pour ce texte:

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

Il trouve tous les mots sauf cAB cAb cab Cab CabC, ce qui, je présume, ne devrait pas être considéré comme une abréviation.

Ventilation de l'expression:

  • \b est la limite de mot.
  • (?:[A-Z]{2}[:alpha:]*) accepte tous les mots commençant par deux lettres majuscules.
    • [:alpha:]* correspond au reste du mot en acceptant toutes les lettres, majuscules ou minuscules.
  • | "ou" essaie l'expression suivante si la première ne correspond pas.
  • (?:[A-Z][a-z][A-Z][:alpha:]*) accepte tous les mots commençant par les lettres supérieure, inférieure, supérieure.
Jim K
la source
Une autre bonne suggestion. Dommage que je ne puisse pas marquer les deux comme la solution correcte. Laquelle préférer dépend vraiment de la situation. Pour le meg, les deux RegExps ont donné des résultats identiques, en raison de la nature de mon texte.
Øby