正規表現の記号の扱いについて

outlookにて、受信メールから正規一致表現にて
以下のような文字が存在するかを確認したいとします。

顧客CD(数字3桁指定):777
※記号すべて半角です

この場合の正規表現
顧客CD¥(数字3桁指定¥):¥w{3}$

とするかと思うのですが、どうも半角:で引っかかります。
試しに¥:を行ったのですが、これもだめでした。

正規表現を組んでいる際にテスト用テキストではしっかりと判定できているのですが
実際に動作を行うと判定でFalseとなってしまう状況です。

試しにすべて半角置換したり、Trimで余分な空白を削除を試みましたが改善なしでした。

何か解決策はありますでしょうか。

こんにちは

取り急ぎ、:の部分を\W*にしてみてはと思います

ありがとうございます。
しかしその方法ですと

顧客CD(数字3桁指定)1234
など誤っている場合でもTrue判定されるかと存じますため
他に方法がないかと考えています。

こんにちは

顧客CD(数字3桁指定)1234
など誤っている場合でもTrue判定されるかと存じますため

\W*ですと上記はFalseになりますが...

完全一致させるのであれば、当該文字を正しく指定するしかないように思えます。
もし可能でしたら具体的なデータを共有いただくと良いかと思います。
(実際に走らせてみて当該文字列をWriteTextFileアクティビティで出力したファイルを共有いただくとベストです。)

失礼いたしました。
¥W* で正規表現アクティビティ上ではちゃんと認識するのですが
やはり実際に実行をするとFalse判定となります。

詳細が事情により出せず申し訳ありません。

原因として想定しているのが
・メール上は:←が半角ですが
一時停止をしてメモ帳などに貼り付けると:←が全角になる

これによって判定ができていないような印象です。
取り急ぎ:自体をReplaceで除去して試みようと思います。

こんにちは

半角全角だけの問題なら:の部分を

[::]

とすればOKかと思いますが
これらは\Wでマッチする内容ですので、原因は別にあるように思えます。
データの共有は難しそうでしょうか?

ありがとうございます。
データの提出は事情によりできないため1文字づつ判定を試してみました。

顧客CD(数字3桁指定):777 という場合
コープ¥(数字¥d桁¥)[::]¥d{3}

でTrue判定を取ることができました。

ただ、7777のように4文字入ったりしてもTrue判定されるため
¥n や $ を入れてみましたが、この部分でFalseとなっていたようです。

改行が入っているため¥r¥nなど試してみましたが
これもFalse判定となりました。

こんにちは

いま必要なのは数字3桁の抽出でしょうか?
そうであれば以下で十分かと思います。

System.Text.RegularExpressions.Regex.Match(yourString,"(?<=顧客CD\(数字3桁\D*)\d{3}(?=\D|$)").Value

あるいはTrue/FalseだけでよければIsMatchメソッドをお使いください。

ありがとうございます。

必要なのは
・定型文通りの文字列になっているかのTrue/False判定です
定型文→ 顧客CD(数値3桁):▲▲▲

※▲=数字

例えば
顧客CD:▲▲▲ や 顧客CD(数値3桁):▲
顧客CD(数値3桁):▲▲▲▲
顧客CD(数値3桁):abc など

など定型文以外の形であればすべてFalse判定をしたいという状況です。

IsMatchを調べてみます。

こんにちは

そうであれば例えば

System.Text.RegularExpressions.Regex.IsMatch(yourString,"顧客CD\(数字3桁指定\)[::]\d{3}[^\S\n]*(\n|$)")

でよいかと思います。(文言の部分は上記で揺れがあるようですので適当なものに修正ください。コロンの全角半角は許容しています。3桁の数字後は空白の類だけ許容しています。)

ありがとうございます。

初心者のため大変恐縮なのですがいただいた条件は

正規表現に入れるのでしょうか?それとも条件分岐の条件へ入れるのでしょうか?

こんにちは

上記の式はBooleanで結果を返しますので、IFアクティビティの条件欄に直接記述することができます。あるいは代入アクティビティで結果をBoolean変数に入れることもできます。

もしIsMatchアクティビティを使う場合はパターンとして

"顧客CD\(数字3桁指定\)[::]\d{3}[^\S\n]*(\n|$)"

を入力します。

IsMatchを使用したかったため
顧客CD¥(数字3桁指定¥)[::]¥d{3}[^¥S¥n]*(¥n|$) で解決することができました

見直したところ
HTML形式で受信→string型へ変換→:が実際には半角ですが
半角判定するとFalse
全角判定してもFalse という現象が起きていたようで、[::]で全角半角の許容(?)で判定させることができました。
また改行しかないはずが、空白文字?と判定される部分があるようで
文末分を許容した内容をいただけたことで正確に判定できました。

とても助かりました。ありがとうございました。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.