web-dev-qa-db-ja.com

正規表現を使用してGoogleスプレッドシートのデータを分類する方法

Googleスプレッドシートの一部のデータを分類しようとしています。

  • 列AのTAB「フレーズ」に「スクリーニングするフレーズ」があります。たとえば、「青みがかった家」
  • 列Aに「単語」、TAB「単語」があります。たとえば、「blue」
  • 列Bの「単語」タブに「カテゴリ」があります。たとえば、「色」

サンプルファイルを作成しました こちら: 関連する投稿へのリンクもあります。

列Aの単語を使用した正規表現を使用して、Aの一部のフレーズと一致させ、Bから適切なカテゴリを返します。

たとえば、「blueish house」で「blue」を検索し、「color」を返します。 「偉大な白い靴」で「白」を見つけて「色」を返したいのですが、数字が続く場合はそうではありません。したがって、正規表現を使用する必要があります。

列C TAB「フレーズ」で次の式を使用しています。機能しますが、正規表現では機能しません。 regを返します。式自体であり、カテゴリに一致することはできません。

=arrayformula(vlookup(arrayformula(iferror(regexextract(A2:A8,join("|",Words!$A$1:$A$7)))),Words!A$1:B,2,0))

列Dで(関連する投稿から)数式を調整しようとしましたが、機能しません。

3
G Adams

これが私がしたことです-SO Test-Aurielleという名前のドキュメントをドキュメントに追加しました。

次に、以下を使用して、列Bに可能なカテゴリの一意のリストを作成しました。

=UNIQUE(Words!B:B)

列Aでは、|である正規表現AND演算子を使用してJOINを実行し、次の式を使用しました。

=IF(ISTEXT(B2),JOIN("|",FILTER(Words!A:A,Words!B:B=B2)),)

基本的にフィルターは、カテゴリー値によってキーワードを結合するように制限します。

次に、列Dに次の式を追加しました。

=IFERROR(INDEX(A$2:B,MATCH(TRUE,ARRAYFORMULA(REGEXMATCH(C2,INDIRECT("A"&2&":A"&3+COUNTA(B$2:B)))),0),2))

基本的にここで何が起こるかは、内側からそれを分解する場合、値が実際に存在する行に応じてtrueまたはfalseを返すREGEXMATCHとともにARRAYFORMULAを使用していることです.

したがって、ワードTRUEを使用してMATCH数式のキーにし、次にINDEXを使用して、インデックス行を取得し、1列上に移動してカテゴリを取得します。

注:また、列Bに実際に存在する値の数を計算するために追加のINDIRECT式を追加し、必要な行数に式が動的に対応できるようにします。

enter image description here

2