Ansible regex_search多捕获分组重组输出数组问题如何修复
问题根因
你用错了Jinja2过滤器:regex_search的核心作用是检索匹配的内容,当传入多个捕获组引用参数时,它会返回各捕获组组成的列表,而非拼接后的字符串,这就是你得到数组而非目标版本字符串的原因。
你要实现的是字符串替换逻辑,直接使用regex_replace过滤器即可,它会将整段匹配到的内容替换为你指定的捕获组拼接格式,直接返回字符串类型的结果。
修复后代码
set_fact: cacheable: yes mydict: "{{ mydict | combine({ 'version': myvar | regex_replace('^0*(\\d+)\\.0*(\\d+)\\.0*(\\d+)$', '\\1.\\2.\\3') }) }}"
可选方案(坚持使用regex_search的场景)
如果你确实需要用regex_search实现,可以将返回的捕获组列表用join过滤器拼接:
set_fact: cacheable: yes mydict: "{{ mydict | combine({ 'version': myvar | regex_search('0*(\\d+)\\.0*(\\d+)\\.0*(\\d+)', '\\1', '\\2', '\\3') | join('.') }) }}"
内容的提问来源于stack exchange,提问作者TSG
相关产品推荐
相关产品推荐

