長いansible文字列変数mystr
があるとします。正規表現パターンsubstr_pattern
があり、このパターンに一致する部分文字列がmystr
から除外され、別の変数substr
に割り当てられます。 pythonのre
モジュールでこれを行うのは簡単ですが、 playbook_filters のドキュメントからこれをansibleで行う明確な方法はないようです自体。
Ansible docsには3つの方法があり、どれも私の問題を解決していないようです。
match
:このフィルターは、パターン全体が文字列全体と一致するかどうかに応じてtrue/falseを返しますが、一致したグループ/部分文字列は返しません。
search
:より大きな文字列でsubstrをフィルタリングするために使用されます。ただし、match
と同様に、true/falseのみを返し、ここで必要な一致するグループ/サブストリングは返しません。
regex_replace
:これは、ストリング内の一致したパターンを別のストリングで置き換えるために使用されます。しかし、一致したパターンに対応する部分文字列/グループを新しい変数に登録する方法は明確ではありません。
不足しているものはありますか?または、これはansibleの欠けている機能ですか?
Ansibleバージョン:2.1
例:
mystr: "This is the long string. With a url. http://example.org/12345"
pattern: "http:\/\/example.org\/(\d+)"
substr: 12345 # First matched group i.e. \\1
概要:pattern
からmystr
に一致する部分文字列を取得して、それをansible変数substr
に登録する方法
パターンを変更できる場合は、regex_replace
フィルタリングして、文字列全体を一致した数字のみで置き換えます。
mystr | regex_replace('^.*http:\/\/example.org\/(\d+).*?$', '\\1')
結果を新しい変数に割り当てるには、set_fact
モジュール。
- set_fact:
substr: "{{ mystr | regex_replace('^.*http:\/\/example.org\/(\d+).*?$', '\\1') }}"