テキスト文字列からすべて大文字の単語のみを抽出する方法を探しています。問題は、大文字と小文字が混在するテキスト文字列内の他の単語を抽出してはならないことです。
たとえば、正規表現を使用して次の文から KENTUCKY を抽出するにはどうすればよいですか。
ケンタッキーには多くの選択肢があります
regexextract()
RE2を使用するGoogleスプレッドシートを使用してこれを実行しようとしています。
あなたの考えを聞くのを楽しみにしています。
テキスト文字列からすべて大文字の単語のみを抽出する方法を探しています。問題は、大文字と小文字が混在するテキスト文字列内の他の単語を抽出してはならないことです。
たとえば、正規表現を使用して次の文から KENTUCKY を抽出するにはどうすればよいですか。
ケンタッキーには多くの選択肢があります
regexextract()
RE2を使用するGoogleスプレッドシートを使用してこれを実行しようとしています。
あなたの考えを聞くのを楽しみにしています。
テキストがセル A2 にあるふりをします。
各テキスト セグメントにインスタンスが 1 つしかない場合、これは機能します。
=REGEXEXTRACT(A2,"([A-Z]{2,})")
1 つのテキスト セグメントに複数のインスタンスがある場合は、これを使用します。正規表現を動的に調整して、すべての出現箇所を抽出します。
=REGEXEXTRACT(A2, REPT(".* ([A-Z]{2,})", COUNTA(SPLIT(REGEXREPLACE(A2,"([A-Z]{2,})","$"),"$"))-1))
ALLCAPS で単語のチャンク全体を抽出する必要がある場合は、次を使用します。
=REGEXEXTRACT(A2,"\b[A-Z]+(?:\s+[A-Z]+)*\b")
=REGEXEXTRACT(A2,"\b\p{Lu}+(?:\s+\p{Lu}+)*\b")
この regex demoを参照してください。
詳細
\b
- 単語境界[A-Z]+
- 1+ ASCII 文字 (\p{Lu}
アラビア語などを含む任意の Unicode 文字に一致)(?:\s+[A-Z]+)*
- のゼロ回以上の繰り返し
\s+
- 1 つ以上の空白[A-Z]+
- 1+ ASCII 文字 (\p{Lu}
アラビア語などを含む任意の Unicode 文字に一致)\b
- 単語境界。または、大文字の間に句読点や記号を許可する場合は、使用できます
=REGEXEXTRACT(A2,"\b[A-Z]+(?:[^a-zA-Z0-9]+[A-Z]+)*\b")
=REGEXEXTRACT(A2,"\b\p{Lu}+(?:[^\p{L}\p{N}]+\p{Lu}+)*\b")
正規表現のデモを参照してください。
ここでは、[^a-zA-Z0-9]+
ASCII 文字と数字以外の 1 つ以上の文字と[^\p{L}\p{N}]+
一致し、Unicode 文字と数字以外の任意の 1 つ以上の文字と一致します。