我正在尝试使用Ansible正则表达式从多字符串中提取子字符串,但没有成功。
我从一个被执行的命令(teleport users add
)获得了这个输出:
“stdout”:“已创建注册令牌,有效期为3600秒。与用户共享此URL:\ n ntttt:// main-proxy:3080 / web / newuser / d32ed2bc0ebb0084a381123e3eff0bfa \ n \ n注意:确保'main-proxy'是可以访问的!“
我想提取juste令牌。这里:d32ed2bc0ebb0084a381123e3eff0bfa
。
我在结果变量中注册了输出,并且我试图提取令牌但没有成功:
- set_fact:
signup_token: '{{ result.stdout | regex_replace("^(?s)^https:\/\/.*\/(.+).*?$", "\\1") }}'
- debug: msg={{ signup_token }}
正确的正则表达式和语法是什么?
答案 0 :(得分:1)
为什么使用如此复杂的正则表达式?在[0-9a-f]
之后获取/
的32个字符。
- set_fact:
signup_token: "{{ mystr | regex_search(qry) }}"
vars:
qry: '(?<=\/)[a-f0-9]{32}'
使用https://regex101.com/等网站来测试您的表达式。
答案 1 :(得分:0)
正则表达式(?s).*https://.*/([^\r\n]+).*
正如我预期的那样正常工作。
也是的,我可以尝试从标准输出的第二行获取最后32个字符但是如果它发生变化我更喜欢来自令牌长度的agnostique,所以正则表达式提取令牌id从输出到我现在的正确方法。