0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Blue Prism] 正規表現の名前付きキャプチャを使う

Posted at

はじめに

Blue Prism で、一定の書式に従った文字列をパースする際に、正規表現を使いたい場面があり、「名前付きキャプチャ」を利用する方法を調べてみました。

「名前付きキャプチャ」とは、例えば Python では「名前つきグループ」と呼ばれているもので、下記のように名前を指定した「マッチ部分」の文字列を取り出して利用できるようにするものです。

>>> m = re.match(r'(?P<first>\w+) (?P<last>\w+)', 'Jane Doe')
>>> m.groupdict()
{'first': 'Jane', 'last': 'Doe'}

Utility - Strings::Extract Regex Values の使い方を調べる

インストールするとついてくる Utility 系のVBO に、「Utility - Strings」があり、その中のアクションの「Extract Regex Values」が名前的にも使えそうです。
VBO のマニュアルをみてみます。

extract_regex_values.jpg

なるほど、わからん。。。

仕方がないので、Utility - Strings VBO の本体をみてみると、オブジェクトに用例としてデータアイテムの初期値が入っており、テスト実行して動きが確認できるようになっています。これは助かりますね!

extract_regex_values_00.jpg

使い方のポイントは、引数の コレクションNamed Values にあります。
列名に Name Value をもつコレクションを準備し、その Name 列に、正規表現で設定した名前付きキャプチャの「名前」を指定します。

用例での正規表現は下記の通りです。設定されている名前付きキャプチャは LowerUpperです。

(?<Lower>\d+)\s*(-|to)\s*(?<Upper>\d+)

LowerUpperName 列に設定します。

Named_Value_initial.jpg

実行すると、結果が Value 列に入る仕組みになっているようです。

テスト対象の文字列は、下記の通りなので、意図通りのキャプチャができています。

100-200
Named_Value_result.jpg

これで使い方がわかりました。

Utility - Strings::Extract Regex Values を使ってみる

試しに使ってみます。

テスト対象の文字列を下記のように設定し、角括弧の中身と、角括弧に続く文字列をそれぞれ別にキャプチャしてみます。

[場所] 東京都品川区西五反田

使うパターン文字列は下記の通りです。角括弧の中身を Tag、角括弧に続く文字列を Content としてキャプチャしようとしています。

^\[(?<Tag>\w+)\]\s*(?<Content>.+)$

プロセスの全体像は下記のようになります。
try00.jpg

ポイントとなるコレクション Named Values Input は下記のように Name列、Value列を設定し、Name列の初期値に、名前付きパターンの TagContent を設定します。

try_named_value.jpg

実行すると、意図通りキャプチャできたことがわかります。

try_named_value_result.jpg

まとめ

VBO のマニュアルをみても使い方がわからない場合も、本体をみると分かることがある!

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?