【質問】
正規表現を利用してある文字列から特定の数字を抽出し、文字列の開始位置を取得したい。
(例えば、ある8桁の数字を取得し開始位置も特定するという形を想定している)
どのように設定すればよいか。
【回答】
指定した文字列から正規表現で数字や出現位置を取得する方法としては以下のように設定することで取得可能です。
(今回は例にあった8桁の数字で想定しています)
なお、以下の設定方法では下記のリスクにも対応した形となっております。
・全角数字を含む数字がヒットする
・取得したい桁数以上の文字列を取得する
①全角数字を含む数字がヒットすることを防ぎたい場合、
「テキスト -検索」アクションにて以下のように設定します。
テキスト→取得した変数の値
検索→[0-9]{8}
正規表現→チェックを入れる
変数に最初のインデックスを設定する→指定した変数
変数に見つけたテキストを設定する→同上
→上記の設定を行うことで、全角数字も含む8桁がヒットすることを防いで
8桁の半角数字のみを取得することができます。
②全角数字を含む数字を防ぎかつ取得したい桁数以上の文字列を取得したい場合、
①の設定後「テキスト -検索」アクションにて以下のように設定します。
テキスト→該当テキストを取得した変数
検索→[^0-9][0-9]{8}[^0-9]
正規表現→チェックを入れる
変数に最初のインデックスを設定する
変数に見つけたテキストを設定する
→指定した変数
③「テキスト -サブストリングを取得する」アクションにて以下のように設定します
元のテキスト→取得した変数の値
開始位置→2
テキストの長さを取得→指定した文字列の長さ(例:8)
結果を変数に設定する→指定した変数
上記の設定によって、2文字目から8桁のサブストリングを取得することでちょうど8桁の数字を取得することができるように設定しています。
なお上記の設定の場合、文字の取得位置が数字の前の1文字からとなりますので出現位置を+1して調整します。
以下サンプルタスクです。
こちらのサンプルタスクにてご確認ください。
-----サンプルタスクここから-----
<AMVARIABLE NAME="var_text" VALUE="" DESCRIPTION="読み込みデータ" TYPE="text" />
<AMVARIABLE NAME="var_8num" VALUE="" DESCRIPTION="8桁の半角数字" />
<AMVARIABLE NAME="var_position" VALUE="" DESCRIPTION="8桁の数字の出現位置(文字数)" TYPE="number" />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_text">CREATE TABLE PRVEDWIN2.EMP
(
EMPNO CHAR(10) NOT NULL
, AREA NUMERIC(3, 0) NOT NULL
, EMPNAME CHAR(50)
, GENDER_F NUMERIC(1, 0)
, CONSTRAINT PK1 PRIMARY KEY
(
EMPNO
, AREA
);
COMMIT;989765432
トラップをリッスン67386222123するローカル ポート
受注番号:81196768
8桁の数字を見つけて検知する
・開始位置か、終了位置</AMVARIABLE>
<!--半角数字8桁と、その出現文字位置を変数に格納します-->
<AMTEXT TEXT="%var_text%" FIND="[0-9]{8}" RESULTVARIABLE="var_position" USERE="YES" FOUNDTEXTVARIABLE="var_8num" />
<!--数字10桁など8桁以上もテキストの内容にあり、それを条件にあてはまらないように設定したい場合はこちらをご利用ください-->
<AMREGION NAME="前提として、テキストの先頭または末尾には現れないことが条件となります。8桁の数字の1文字前から取るので、出現位置の文字数は+1します" COLLAPSE="no" />
<AMTEXT TEXT="%var_text%" FIND="[^0-9][0-9]{8}[^0-9]" RESULTVARIABLE="var_position" USERE="YES" FOUNDTEXTVARIABLE="var_8num" />
<AMTEXT ACTIVITY="get_substring" TEXT="%var_8num%" RESULTVARIABLE="var_8num" STARTPOSITION="2" LENGTH="8" />
<AMVARIABLE ACTIVITY="increment" RESULTVARIABLE="var_position" />
<AMENDREGION />
-----サンプルタスクここまで-----