web-dev-qa-db-ja.com

略語を見つけるための正規表現

(これは 以前に尋ねた質問 からのスピンオフです。)

私は博士論文のすべての略語を見つけるLibreOfficeWriterの正規表現を考案しようとしています。現在、私は次のものを持っています:

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

これは、複数の大文字で始まるすべての単語を識別するため、ほとんど機能します。しかし、私はそれが捕まえないいくつかの略語、すなわちこれらを持っています:

CoE RoR RoC

理想的には、少なくとも2つの大文字を持つすべての単語を識別する正規表現が必要ですが、単語の先頭である必要はありません。しかし、私はそれを作成しようとして途方に暮れています。誰かが私を正しい方向に向けることができますか?

3
Øby

私は質問をジムKとは少し異なって解釈しました。すべての略語が大文字で始まり、少なくとももう1つの大文字が含まれていると仮定するとどこでも単語に多くを追加する必要はありません既存の正規表現:

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

大文字は任意の数の小文字とペアになり、Wordの大文字間のスペースを効果的に排除します。これらのペアの少なくとも2つは、少なくとも2つの大文字があることを意味します。

略語に少なくとも2つの大文字を含める必要があるが、1つで始める必要がない場合は、大文字のチェックの前に小文字のチェックを追加します。

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

これらは両方とも、ジムのテストテキストに対してテストされました。 (ありがとう、ジム!)

4
jkmartindale

この式はすべての可能性を見つけるわけではありませんが、探しているものを見つける必要があります。

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

したがって、このテキストの場合:

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

cAB cAb cab Cab CabCを除くすべての単語が検出されますが、これは略語と見なされるべきではないと私は推測しています。

式の内訳:

  • \bは単語の境界です。
  • (?:[A-Z]{2}[:alpha:]*)は、大文字の2文字で始まるすべての単語を受け入れます。
    • [:alpha:]*は、上位か下位かに関係なく、任意の文字を受け入れることにより、単語の残りの部分と一致します。
  • | "または"は、最初の式が一致しない場合、次の式を試行します。
  • (?:[A-Z][a-z][A-Z][:alpha:]*)は、upper、lower、upperで始まるすべての単語を受け入れます。
2
Jim K