You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Ansible中使用regex_replace提取指定字符串的问题

解决Ansible regex_replace提取接口名失败的问题

你的问题出在regex_replace的正则写法上:原正则^(\\S+)仅匹配了字符串开头的非空白字符(也就是接口名),但替换操作只是将这部分内容替换为它本身,而字符串中剩下的部分(空格和后续数字)没有被正则匹配到,因此会原封不动保留,最终输出和原列表一致。

两种可行的解决方法:

方法1:使用regex_search直接提取

regex_search的作用是从字符串中提取匹配的内容,更适合你的场景:

- name: Extract interface in list
  set_fact:
    trunk_interfaces: "{{ interfaces | map('regex_search', '^\\S+') | list }}"

方法2:修改regex_replace的正则匹配整个字符串

调整正则,让它匹配整个字符串,仅保留开头的接口名分组:

- name: Extract interface in list
  set_fact:
    trunk_interfaces: "{{ interfaces | map('regex_replace', '^(\\\\S+).*', '\\\\1') | list }}"

这里的^(\\S+).*会匹配从开头到结尾的整个字符串,其中(\\S+)捕获接口名,替换时用\\1只保留这个捕获组的内容,丢弃后面的所有字符。

验证结果

两种方法执行后,debug模块都会输出预期结果:

msg:
  - 1/1/18
  - 1/1/20
  - 1/1/21
  - 1/1/32

内容的提问来源于stack exchange,提问作者James Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:27:36