分割字符串以获取除最后一个元素之外的所有元素

Ash*_*har 3 formatting split ansible

这是我的剧本

---
- name: This is a hello-world example
  hosts: localhost
  vars:
    mystr: "I.To.Be.war"
  tasks:

    - name: Hi
      debug:
        msg: "{{ mystr.split('.') | first | trim }}"
Run Code Online (Sandbox Code Playgroud)

输出:

I
Run Code Online (Sandbox Code Playgroud)

过滤器是在变量末尾trim删除它。\r\n

但是,我希望有一个通用的解决方案,应该打印分割定界符最后一个元素之前的所有内容,即:.

预期输出:

I.To.Be
Run Code Online (Sandbox Code Playgroud)

注意:我不想要这样的解决方案,"{{ mystr.split('.')[0][1][2] }}"因为它本质上不通用。

Zei*_*tor 5

  1. 使用过滤器将过滤器应用trim到列表中的每个元素map
  2. 使用 python 列表切片来获取除最后一个之外的所有内容
  3. 将元素重新连接起来
$ ansible localhost -m debug \
-a "msg={{ (mystr.split('.') | map('trim'))[:-1] | join('.') }}" \
-e "mystr=I.to.be.war"
localhost | SUCCESS => {
    "msg": "I.to.be"
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用正则表达式来匹配字符串的第一部分

$ ansible localhost -m debug \
-a 'msg={{ mystr | regex_replace("^(.*)\\.[^.]*$", "\\1") }}' \
-e "mystr=I.to.be.war"
localhost | SUCCESS => {
    "msg": "I.to.be"
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您分享您的测试方法。 (2认同)