在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
相关产品推荐
相关产品推荐

