・概要
DSで正規表現を用いて、文字パターン等で文字を抽出する方法
・詳細
DSで正規表現を用いて、文字パターン等で文字を抽出する方法を紹介します。
【パターン1】文字列の中に含まれる、桁数が変動する数字を抜きたい。
今回は例として、下記の文字列に含まれる"発注数量"の数字の部分を抽出します。
例 「発注明細ID=00000000 注文コード=000000000 発注数量=10 出荷数量=25」
①抽出対象の数字の前に含まれている文字列を明確に指定して抽出する方法
[入力例]
(画像1.記述方法①画面)
[説明]
・パターン(Pattern):.*発注数量=(\d{1,3}).*
任意の文字列(.*)から始まり、「発注数量=」と言う文言があります。
その後に1~3桁の数字((\d{1,3}))、任意の文字列(.*)があることを記しています。
・エクスプレッションを置き換え(Replace Pattern):$1
「パターン(Pattern)」を上記の通り記載した場合には、下記の扱いとなります。
$0:全体の文字列
$1:「発注数量=」の直後の1~3桁までの数字
②文字列の配列を記述し、位置を指定する方法
桁数がランダムの場合には、他の箇所も明確に記述を行う必要があります。
※下記例では、共通して"文字列=数字"の配列なので、"=(イコール)"を加えています。
[入力例]
(画像2.記述方法②画面)
[説明]
・パターン(Pattern):(.*)=(\d{8})(.*)=(\d{8})(.*)=(\d{1,3})(.*)=(\d{1,3})
任意の文字列(.*)から始まり、「=」のあとに8桁の数字(\d{8})、任意の文字列(.*)があります。
その後に1~3桁の数字((\d{1,3}))、任意の文字列(.*)があることを記しています。
・エクスプレッションを置き換え(Replace Pattern):$6
「パターン(Pattern)」を上記の通り記載した場合には、下記の扱いとなります。
$0: 全体の文字列
$1:1つ目の「=」の直前の文字列
$2:1つ目の「=」の直後の8桁の数字
$3:2つ目の「=」の直前の文字列
$4:2つ目の「=」の直後の8桁の数字
$5:3つ目の「=」の直前の文字列
$6:3つ目の「=」の直後の1~3桁までの数字
$7:4つ目の「=」の直前の文字列
$8:4つ目の「=」の直後の1~3桁までの数字
【パターン2】文字列の中にあるカッコ内の数字を抜きたい。
今回は例として、下記カッコ内の数字の部分を抽出します。
例 「1袋(150個)」
①数字を指定して抽出する方法
[入力例]
(画像3.記述方法①)
[説明]
・パターン(Pattern):(.*)((\d{1,10})(.*))
任意の文字列(.*)から始まり、1~10桁までの数字((\d{1,10})、
単位を任意の文字列(.*)で記しています。
・エクスプレッションを置き換え(Replace Pattern):$2
「パターン(Pattern)」を上記の通り記載した場合には、下記の扱いとなります。
$0: 全体の文字列
$1:カッコの直前の文字列
$2:カッコ内の数字
$3 単位
半角カッコの場合は、正規表現として用いられ、"特殊な意味を持つ記号"となります。
記号ではなくただの文字列として扱う場合は、前に「\(円マーク・バックスラッシュ)」を付与し、
"特殊な記号"と言う意味を打ち消す必要があります。
下記ナレッジをご参照ください。
パターン指定の際に特殊な意味を持っている記号(半角括弧など)を文字列として使用する方法
【パターン3】文字列として日付を抜いた後、書式変更を行いたい。
今回は例として、下記の文字列に含まれる日付(190101)を抽出したあと、
西暦・月・日の間に「/」を入れ、西暦を4桁で表します。
今回の例では、日付(190101)を変数名"日付"に抽出します。
例 「AA-BB-190101CCDD 1234eeee」
1.文字列から日付を抜きます。
[入力例]
(画像4.日付の抜き出し画面)
[説明]
・パターン(Pattern):.*(\d{6}).*
任意の文字列(.*)から始まり、6桁の数字(\d{6})のあとに、
任意の文字列(.*)があることを記しています。
・エクスプレッションを置き換え(Replace Pattern):$1
「パターン(Pattern)」を上記の通り記載した場合には、下記の扱いとなります。
$0:全体の文字列
$1:6桁の数字
2.抜き出した日付に"substring"関数を使用してスラッシュを追加します。
(画像5.日付にスラッシュを追加画面)
変数名"日付"に格納した「190101」の間に、"substring"関数を使用して「/」を入れます。
①「変数の変換(Convert Variables)」で[+]をクリックします。
②『変換の設定(Conversion Configuration)』画面で[+]をクリックし、
[エクスプレッションを評価(Evaluate Expression)]を選択します。
③『エクスプレッションを評価の設定(Evaluate Expression Configuration)』画面で、
エクスプレッション(Expression)に下記の式を入力します。
エクスプレッション:>><<+substring(日付,0,2)+>>/<<+substring(日付,2,4)+>>/<<+substring(日付,4,6)+>><<
3.6桁の日付の先頭に"20"をテキスト追加(Add Text)して、8桁にします。
(画像6.テキスト追加画面)
また、パターンの置き換え(Replace Pattern)を使用して、Long Text型のテキスト中に文言を差し込むことが可能です。
今回は例として、下記本文に文言"商品A"を差し込む方法をご紹介します。
(画像7.本文)
1.「変数の変換(Convert Variables)」ステップにて、変換(Converters)の[+]を押下し、開始(From)と終了(To)の変数を指定します。
開始(From):本文が格納された変数を指定します。
終了(To):変換後の本文を格納する変数を指定します。(同変数の指定も可能です)
2.コンバータ(Converters)の[+]を押下し、[テキストフォーマット(Text Formatting)]-[パターンを置き換え(Replace Patern)]でパターンを置き換えます。
(画像8.パターンを置き換え の画面)
[説明]
・パターン(Pattern):(.*\n\n)(.*.*)(\n\n.*.*)
本文はLong Text型で改行を含むため、改行文字「\n」をパターン区切りに利用しテキストを3分割しています。
$1:任意の文字列と改行(.*\n\n)
$2:任意の文字列(.*.*)
$3:改行と任意の文字列(\n\n.*.*)
・エクスプレッションを置き換え(Replace Expression):$1+$2+>><<+商品名+>><<+$3
$0 任意の文字列 $1(任意の文字列 改行) $2(任意の文字列)>><<+変数+>><<$3(改行n任意の文字列)
関連ナレッジ