如何在Ansible中通用获取拆分字符串除最后元素外的全部内容
Ansible 通用提取分隔符前所有元素(除最后一个)的解决方案
这里给你两种通用的实现方式,不用硬写固定索引,适配任意数量的分隔符元素:
方法一:列表切片+拼接
通过拆分字符串为列表,切片去掉最后一个元素后再拼接,是最直观的实现方式:
--- - name: 提取除最后一个元素外的所有内容 hosts: localhost vars: mystr: "I.To.Be.war" tasks: - name: 用split切片+join实现 debug: msg: "{{ (mystr.split('.')[:-1] | join('.')) | trim }}"
逻辑说明:
mystr.split('.'):把字符串按.拆成列表['I', 'To', 'Be', 'war'][:-1]:取列表中除最后一个元素外的所有项,得到['I', 'To', 'Be']join('.'):用.把列表重新拼接成字符串I.To.Be- 最后加
trim处理变量末尾可能存在的\r\n
方法二:正则表达式替换
如果不想操作列表,也可以用正则直接替换掉最后一个分隔符及后面的内容:
--- - name: 提取除最后一个元素外的所有内容 hosts: localhost vars: mystr: "I.To.Be.war" tasks: - name: 用正则替换实现 debug: msg: "{{ mystr | regex_replace('\\.[^.]+$', '') | trim }}"
逻辑说明:
- 正则表达式
\.[^.]+$:匹配字符串末尾的最后一个.,以及后面所有非.的字符(也就是最后一个元素) - 替换为空字符串后,直接得到
I.To.Be,再通过trim处理换行符
两种方法的输出结果都符合预期:
I.To.Be
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

