Power Automate で文字列末尾にある数値文字を抽出する
abcd123
という文字列があったときに、末尾の数値文字 123
を抽出したいケースを Power Automate で考えます。
検討事項
- 文字列の末尾をまとめて抽出したいので
substring
関数を使うのが楽 substring
関数を使うには開始位置を定めなければならない- 位置(インデックス)を取得するには
indexOf
関数やlastIndexOf
関数が使える - 数値文字の先頭インデックスが取得できればOK
- でもどの数値が先頭にくるかわからない
- だったら全部の数値(0 ~ 9)のインデックスを取得しよう
- その時の最小値が欲しいインデックス!
作成した Power Automate
解説
0 ~ 9 数値配列の定義
全部の数字(0~9)で indexOf
関数を適用したいので、予め 0 ~ 9 の配列を定義しておきます。
選択アクションで数値のインデックスをまとめて取得
選択アクションは、配列(アレイ型の変数)に対して 要素の数は変えずに、配列の要素をインプットとして、何かしらの処理を実施する ことができます。
選択アクションについては Qiita に書いたので参考にしてください。
今回のケースで言えば、0 ~ 9 の数字が入った配列を、それぞれの数値で indexOf
関数を適用した結果が欲しいので、選択アクションが使えます。
アレイのフィルター処理で indexOf
関数の結果を絞り込み
indexOf
関数は、検索文字が見つからない場合は -1
を返却します。
最終的に、数値文字のインデックスの 最小値 が欲しいので -1
が含まれていると困ります。(必ず -1
が最小になる)
その為、アレイのフィルター処理アクションを利用して、選択アクションの結果から -1
を取り除く必要があります。
数値文字の先頭インデックスを取得
min
関数を用いて、フィルターした結果の配列の中から最小値を取りだします。
満を持して部分文字列を抽出
文字列を抽出する substring
関数がありますが、コネクタとしても用意されていたので今回はそちらを利用しました。
引数は substring
関数と同じです。
まとめ
データを加工する際に Apply to each を利用すると、思いのほか時間を要する場合があります。
しかし、データ操作コネクタのアクションを使うと爆速で処理されるので、出来るだけこれらを使うように検討すると良いでしょう。
参考
今回は文字列の末尾にまとめて数値文字があるケースですが、数値文字が入り乱れてる場合についてはこちらの記事が参考になると思います。