「部分文字列の抽出」の操作
この操作は現在の文字列、例えば選択した列のセルなどからデータを抽出します。
読み込んだデータにコメントの列が含まれているとして、これらのコメントから特定の情報を抽出するとします。これを行うには、この情報を別の列に入力し、新しい列のフィールドをマッピングして、必要な分析モジュールを適用します。
操作の設定
- 新しい操作を追加して部分文字列の抽出をリストから選びます。
操作の作成に関する詳細な手順については、 [リポジトリ&データ管理 > クラウドETL > オペレーション] をご覧ください。 - 操作エディタで以下を指定します:
- ソース列
ドロップダウンリストからデータを抽出する列を選びます。 - 新しい列
新しい列の名前を入力します。この列には抽出したデータが入ります。 - 方法
手順2aで指定したソース列からデータを抽出する方法を選びます: - 位置
この方法は部分文字列で特定の位置にある文字を抽出します。
例えば、開始位置を1にして、抽出文字列の長さ を3にした場合、プログラムは1番めから3番めまでの位置にある文字を抽出します。 - パターン
この方法は正規表現を使ってデータを抽出します。
パターン表現フィールドに正規表現を指定します(下記、正規表現の使い方を参照)。
Regexpのヒントを表示するをクリックして正規表現のヘルプを表示します。 - フィルタを使用
一定の条件を満たすレコードに対してのみ操作を適用する場合は、フィルタを使用します(例えば、「従業員」フィールドが空白ではないレコードに対して適用するなど)。
詳しくは、操作でフィルタを使用するを参照してください。 - 実行前に操作の結果を確認したい場合は、プレビューを実行オプションを使用します。テーブルの一部がプレビューモードで表示されます。
- 保存をクリックします。これにより、操作エディタウィンドウが閉じ、作成された操作がトップパネルに表示されます。
正規表現の使い方
部分文字列の抽出操作では、列から文字を抽出する際に正規表現を使用することができます。正規表現では複雑な検索パターンを指定することができます。
下記の表は、使用できる演算子と数量詞のリストとその使用例をまとめたものです。
重要:正規表現の文字検索は、大文字と小文字が区別されます。
注: https://regex101.com/ には、正規表現を作成して構文解析できるオンラインサービスがあり、各演算子についての説明を確認することができます。自身で作成した正規表現をテストし、それがどのように作用するかについて詳しい情報を見ることができます。REGULAR EXPRESSIONフィールドに正規表現を入力して、解析結果や説明をEXPLANATIONペインで確認することができます。
演算子
演算子 | 説明 | 例 |
---|---|---|
文字列 | 指定された文字列に一致します。 |
正規表現: 役職の列: 正規表現の一致結果: |
丸括弧内の文字列 ( ) |
指定された文字列に一致します。丸括弧は文字列に対して追加の操作を実施することができます。 |
正規表現: 役職の列: 正規表現の一致結果: |
丸括弧内の文字列 (?: ) |
指定された文字列に一致します。一致した部分文字列は結果の配列に保存されません。 |
正規表現: |
任意の1文字 . (ピリオド) |
任意の1文字に一致します — 文字、数字、または特殊記号。 |
正規表現: 従業員氏名の列: 正規表現の一致結果: |
角括弧内の文字 [ ] |
指定したいずれかの文字に一致します。一致する文字が見つかった時点で検索は止まります。 文字列の範囲を指定するには「-」を使います: |
正規表現: 社会保障番号を含むテキストの列: 正規表現の一致結果: |
特殊文字 \ |
次の特殊文字に一致します: バックラッシュを使って特殊文字をエスケープします。 |
正規表現: 以下の記号を持つレコードの列: "+" 正規表現の一致結果: |
出現回数 \{} |
直前の表現が出現する回数を指定します。 |
正規表現: 内線番号を含むテキストの列: 正規表現の一致結果: |
選言 (いずれか) | |
指定したいずれかの選択肢に一致します。 |
正規表現: 役職の列: 正規表現の一致結果: |
数量詞
数量詞は、直前に指定された文字・文字グループ・文字クラスの出現回数を指定します。
数量詞 | 説明 | 例 |
---|---|---|
? または {0,1} |
直前の文字を0回もしくは1回繰り返します。直前の文字は任意となります。文字グループを任意とする場合は、複数の文字を丸括弧でくくります。 |
正規表現: 従業員名の列: 正規表現の一致結果: |
* または {0,} |
直前の文字を0回以上繰り返します。 |
正規表現: 従業員名の列、一部にタイプミスがある: 正規表現の一致結果: |
+ または {1,} |
直前の文字を1回以上繰り返します。 |
正規表現: 本の章を含むテキストの列: 正規表現の一致結果: |
{m} | 直前のパターンをm回繰り返します。 |
正規表現: 車両登録年を含むテキストの列: 正規表現の一致結果: |
{m,} | 直前のパターンを最低m回繰り返します。 |
正規表現: 顧客電話番号を含むテキストの列: 正規表現の一致結果: |
{m, n} | 直前のパターンをm回からn回繰り返します(mをnより大きい数にはできません)。 |
正規表現: 車両登録年を含むテキストの列: 正規表現の一致結果: |
数量詞の種類:
- greedy(最大数量詞)
- non-greedy(最小数量詞)(lazyまたはreluctantとも呼ばれる)
Greedyはデフォルトの動作で、数量詞が可能な限り一致することを意味します。つまり、正規表現は最初に最大数一致する文字を探し、パターンの残りの部分が一致しない場合、1文字ずつ返していきます。
let regexp = /".+"/g; let str = 'a "witch" and her "broom" is one'; alert( str.match(regexp) ); // "witch" and her "broom"
一方で、non-greedyの数量詞は最小限の出現数で一致しようとします。
let regexp = /".+"/g; let str = 'a "witch" and her "broom" is one'; alert( str.match(regexp) ); // "witch" and her "broom"
複数の演算子と数量詞を使った正規表現の例
以下の書式の日付を含む文書があるとします: Friday, June 18, 2021 8:45:30 PM
月を検知するには、次の正規表現を使用します:
(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)
時間を検知するには、次の正規表現を使用します:
([0-1]?[0-9]|[2][0-3]):([0-5][0-9])(:[0-5][0-9])?
この正規表現は時間、分、秒を見つけます(指定した場合)。
9/5/2024 4:23:55 PM