【Ansible】[name="hoge"]から[hoge]だけ抜き出す方法
【結論】
しかし、正規表現を使いこなせないと、1行のコードを書くのに1日以上費やしてしまうハメになる😭
【目次】
はじめに
APIを叩いて取得したXMLの文字列から、必要な部分だけを取り出してリストにする。
要は、これを
"<name=\"Apple-01\"><name=\"Orange-02\"><name=\"Banana-03\">"
こうしたい
["Apple-01", "Orange-02", "Banana-03"]
ということをAnsibleで行う場合、XMLを解析するための.yml
ファイルを別途別途用意する必要があります。
しかし、わざわざ別ファイルを用意するのも手間だったので、今回は正規表現を使ってリスト化しました。
Pythonで書いた場合
ソース(.py)
import re # 正規表現操作モジュール # ダミーデータ設定 fruit_str = "<name=\"Apple-01\"><name=\"Orange-02\"><name=\"Banana-03\">" print(f"str => {fruit_str}") # nameの文字の抜き出し fruit_list = re.findall(r'name=\"([A-Za-z0-9-]*)\"', fruit_str) print(f"list => {fruit_list}")
実行結果
str => <name="Apple-01"><name="Orange-02"><name="Banana-03"> list => ['Apple-01', 'Orange-02', 'Banana-03']
Ansibleで書いた場合
ソース(.yml)
--- - hosts: localhost # 自分自身に接続する tasks: - name: ダミーデータ設定 set_fact: fruit_str: "<name=\"Apple-01\"><name=\"Orange-02\"><name=\"Banana-03\">" - debug: msg="str => {{fruit_str}}" - name: nameの文字の抜き出し set_fact: fruit_list: "{{ fruit_str | regex_findall('name=\"([A-Za-z0-9-]*)\"') }}" - debug: msg="list => {{ fruit_list }}"
実行結果
参考情報
Filters — Ansible Documentation
re --- 正規表現操作 — Python 3.7.4 ドキュメント
さいごに
正規表現という呪文を使いこなせるようになりたい。