【UiPath】正規表現ビルダーを使って情報を抽出する方法
Qiitaの記事のサルベージです。
この記事を書き上げた直後にUiPath Forumで同様のサンプルが作成されていることに気づいたのは秘密です
概要
UiPathの機能「正規表現ビルダー」を使って、欲しい情報を抽出する方法をまとめました。
ことの始まり
社内メンバーからの質問から始まりました。
メンバー「取得したテキストからメールアドレスだけをうまく取り出す方法ってないかなぁ?」
わたし「たしか正規表現を作りやすくするアクティビティがあった気がするので調べてみますね!」
どんなアクティビティ?
- 正規表現を用いて該当の文字列の有無を判別する「文字列の一致をチェック」アクティビティ
- 正規表現を用いて該当の文字列を抽出する「一致する文字列を取得」アクティビティ
を設定する場合に「正規表現ビルダー」と呼ばれる正規表現を構築、検証できる画面が表示されます(完全式に設定した正規表現に合致する部分が黄色くハイライトされる)
サンプルロボット作ってみました
GitHubにサンプルをあげました
正規表現ビルダーの使い方
今回はプリセットで指定されている「メールアドレス」という正規表現を使用しましたが、他にも「行頭」「行末」「URL」「米国式の日付」など、様々なプリセットのほかにも自分で正規表現を作成することも可能です。
また、テスト用テキストを入力することで、正規表現がきちんと意図した文字列を認識、取得出来ているか確認もできます。
詳細は公式ガイド(RegEx Builderウィザード)を参照してください。
各アクティビティを使う上で気をつけること
「文字列の一致をチェック」アクティビティの注意
確認結果はBoolean型で出力される
出力する変数の型はBoolean型のため、チェック時にいくつ該当の文字列が含まれているかまでは確認できません
※確認したい場合は「一致する文字列を取得」アクティビティで取得した値で判別(取得した値.Length
)した方がよいかと…
「一致する文字列を取得」アクティビティの注意
出力される変数の型はIEnumerable\型
あまり見慣れない型ですが、正規表現で合致した結果が配列として保持されます。
出力変数名を格納するボックスでCtrl + Kを押すことで自動的に適切な型の変数をその場で作成できるので、その方法で対応するとよいと思います
なお、配列なので「繰り返し (コレクションの各要素)」アクティビティを使って繰り返し処理も行えます
※プロパティよりTypeArgumentをSystem.Text.RegularExpressions.Matchに変更するのを忘れないで!
最後に
おすすめの正規表現について学べるサイトがあれば教えてください・・・
【BizRobo!】操作メモ(DesignStudio)
※Qiita記事のサルベージです。
最近はほとんど触れていないので、何か増えたら通知します。
この記事について
自分が研修で実際にBizRobo!に触れてみて分かったこと、気を付けようと思ったことをメモ帳代わりに記載しています。
ステップのエラー処理について
各ステップに設定できるエラー処理は以下の5通り(カッコは日本語版での表記)。
Then | 処理内容 |
---|---|
Skip Following Steps(後続のステップすべてをスキップ) | 後続のステップをすべて無視(処理を終了させる) |
Ignote and Continue(無視して続行) | そのステップを飛ばして次のステップへ進む(値取得だとその値を用いるステップでまたエラーが出る) |
Try Next Altenative(次の代替手段を試行) | 次のトライステップへ進む(処理するトライステップを指定する必要がある) |
Next Iteration(次のイテレーション) | 次のイテレーションへ進む(For Each~系のループ処理の中にいる場合、次のループへジャンプする) |
Break Loop(ループ終了) | ループを抜ける(ループの回数を変数などで指定する場合に使う) |
※エラーになった理由に関わらず、そのステップが上手く進まなかったときは全て同じ処理を行う
(というよりエラー理由を判断できる方法がない)
Test Valiables(変数を判定)での条件指定について
値判定は指定した条件に合致する場合は次のステップへ進み、合致しない場合をエラーとして扱う
(指定の値になったら異なる処理を行う(ループを抜ける、次のトライステップへ進む等)場合は、指定条件は
現在の値 != 指定の値
となる(「!=」は値が等しくない状態を指すため、指定の値でない場合はTrueとなり次のステップへ進む)
判定条件は複数指定できるが、その場合の条件がどの場合にTrueとするかは以下の4通りから選択する(Ifのボックス)
- No Conditions are Satisfied(いずれも条件を満たさない)
→すべての条件に一致しない場合(NAND) - Any Condition is Not Satisfied(いずれかの条件を満たさない)
→一部の条件に一致しない場合(NOR)※デフォルト値 - Any Conditions is Satisfied(いずれかの条件を満たす)
→一部の条件に一致する場合(OR) - All Conditions are Satisfied(すべての条件を満たす)
→すべての条件に一致する場合(AND)
※Ifボックスの下に「Do」ボックスがあり、Trueの場合の処理を選択できるが
- エラー処理に指定された通り※デフォルト値
- 後続のステップ全てをスキップ
の2通りとなっており、正直エラー処理タブで編集したほうができることが多いので触るのはあまりお勧めしない
デザイン・デバッグ時に知っておいたほうがいい操作
- Return Value(値返却)
指定したタイミングでの変数(Typeファイル単位でも可)情報をデバッグ画面で表示する
データ取得のループ等であれば、すべての値を変数に格納した後にこのステップを入れておくと
上手く取れなかった値などがわかりやすい - Disable Step(ステップを無効化)
値判定系のステップを入れると、その後続ステップは値判定がTrueの場合しか編集できないため
該当の値判定ステップで右クリックし、「Disable Step(ステップを無効化)」にチェックを入れておくと、
その処理が無効化されどんな値が入っていてもステップを編集できるようになる
※ただしデザイン時のみ適用しておき、デバッグや実際に使うときは必ずチェックを外すこと
Send Mail(メール送信)ステップでの注意点
GMailアドレスを用いてメール送信を行う場合は以下の通り設定を行うこと
送信するGMail側で、IMAPを有効にする
→GMailを起動し「設定」→「メール転送とPOP/IMAP」→「IMAPアクセス」⇒「IMAPステータス」を有効に変更Send Mailステップ内で、以下の通り設定する
メッセージタブ
入力欄 | 入力内容 |
---|---|
送信元アドレス | 用いるGMailのアドレス |
宛先アドレス | 宛先のアドレス※複数の宛先に送る場合は、カンマ(,)で区切る |
Ccアドレス | Ccのアドレス※複数の宛先に送る場合は、カンマ(,)で区切る |
件名 | メールの件名 |
メッセージ | メールの本文 |
メッセージ タイプ | テキストタイプかHTMLかを指定 |
サーバータブ
入力欄 | 入力内容 | GMailの場合 |
---|---|---|
メールサーバー | SMTPサーバ | smtp.gmail.com |
ポート | SSLもしくはTLSのポート | 587 |
ユーザー | ユーザー名 | 送信元アドレス(Googleアカウント名) |
パスワード | メールのパスワード | Googleアカウントのパスワード |
暗号化 | 平文、TLS、SMTPのいずれかを指定 | TLS |
いずれも変数やエクスプレッション、コンバーターを利用可能なので変数に初期値として入れておくのもあり
そのほかよく使う設定、機能など
グローバル設定
作成した変数(type)は、ループ処理(For Each~,Repeat)すると中身がリセット(初期化)されてしまうため、
ループを跨いでも値を保持しておきたい場合は、グローバル設定をオンにしておく
※抽出したデータをエクセルファイルでの貼り付ける場合の行指定や、指定のデータ内をループし合致した値を変数に格納する場合など
タイムスタンプ
Assign(変数の割り当て)ステップ内でコンバーターを活用して取得
手順
ブログはじめました
どんな記事
ブログ始めたよー報告です。
書く内容は?
現状はRPAに関する内容がメインになる予定です。 (技術に関することや、自分の考え方などなど) とりあえずはQiitaで書いてた内容をコンバージします。
書いてる人は?
「ごじゃむー」と申します。「おだむー」と呼ばれることもしばしば。 高卒で上京&就職後
・大手銀行のシステム保守したり
・セキュリティ会社でちょっとだけサーバ管理したり
・給与計算パッケージをいじくって給与計算したり
・社内の品質管理を担当したり
・社内の売上・利益数字を管理したり
してました。
後半は事務員のような仕事だったところでRPAについて興味を持ち、2019年の4月より転職&RPAエンジニアになりました。 メインで触れているツールはUiPathだけど、BizRobo!、WinActorも触れます。(WAは開発、保守経験あり) 事務経験を活かして「どんなことをやりたいか」「どうすれば期待に応えられるか」を考えながら、少しでも多くの人に「RPA入れて良かったなー」「楽になったな~」と言ってもらえるのが目標。
まとめ
ブログを書くのも慣れないので見づらいかもですが、なにとぞよろしくお願いします。