Tech Note

Azure, Office 365, Power Platform, etc... の勉強手記

Power Automate で文字列末尾にある数値文字を抽出する

abcd123 という文字列があったときに、末尾の数値文字 123 を抽出したいケースを Power Automate で考えます。

検討事項

  • 文字列の末尾をまとめて抽出したいので substring 関数を使うのが楽
  • substring 関数を使うには開始位置を定めなければならない
  • 位置(インデックス)を取得するには indexOf 関数や lastIndexOf 関数が使える
  • 数値文字の先頭インデックスが取得できればOK
  • でもどの数値が先頭にくるかわからない
  • だったら全部の数値(0 ~ 9)のインデックスを取得しよう
  • その時の最小値が欲しいインデックス!

作成した Power Automate

f:id:shibatea:20200610002748p:plain
対象文字列の末尾にある数値文字列を抽出する

解説

0 ~ 9 数値配列の定義

f:id:shibatea:20200610003208p:plain

全部の数字(0~9)で indexOf 関数を適用したいので、予め 0 ~ 9 の配列を定義しておきます。

選択アクションで数値のインデックスをまとめて取得

f:id:shibatea:20200610003418p:plain

選択アクションは、配列(アレイ型の変数)に対して 要素の数は変えずに、配列の要素をインプットとして、何かしらの処理を実施する ことができます。
選択アクションについては Qiita に書いたので参考にしてください。

qiita.com

今回のケースで言えば、0 ~ 9 の数字が入った配列を、それぞれの数値で indexOf 関数を適用した結果が欲しいので、選択アクションが使えます。

アレイのフィルター処理で indexOf 関数の結果を絞り込み

f:id:shibatea:20200610004308p:plain

indexOf 関数は、検索文字が見つからない場合は -1 を返却します。

docs.microsoft.com

最終的に、数値文字のインデックスの 最小値 が欲しいので -1 が含まれていると困ります。(必ず -1 が最小になる)
その為、アレイのフィルター処理アクションを利用して、選択アクションの結果から -1 を取り除く必要があります。

数値文字の先頭インデックスを取得

f:id:shibatea:20200610004914p:plain

min 関数を用いて、フィルターした結果の配列の中から最小値を取りだします。

docs.microsoft.com

満を持して部分文字列を抽出

f:id:shibatea:20200610005143p:plain

文字列を抽出する substring 関数がありますが、コネクタとしても用意されていたので今回はそちらを利用しました。
引数は substring 関数と同じです。

docs.microsoft.com

まとめ

データを加工する際に Apply to each を利用すると、思いのほか時間を要する場合があります。
しかし、データ操作コネクタのアクションを使うと爆速で処理されるので、出来るだけこれらを使うように検討すると良いでしょう。

参考

今回は文字列の末尾にまとめて数値文字があるケースですが、数値文字が入り乱れてる場合についてはこちらの記事が参考になると思います。

mofumofupower.hatenablog.com