将字符串分解为最大长度子字符串列表的最佳实践?

Ansible best practice for breaking a string into a list of max length substrings?

这显示了我正在尝试做的事情

---
- hosts: localhost
  gather_facts: false
  vars:
    str: "abcdefg"
    str_parts: []
  tasks:
    - name: Break string into list of max 3 character parts
      set_fact:
        str_parts: "{{ str_parts + [ str[:3] ] }}"
        str: "{{ str[3:] }}"
      until: str == ""

运行它加上-vvv表示循环代码只执行一次。 str_parts 获得单个成员“abc”,str 更改为“defg”并且日志显示“失败 - 重试:将字符串分成最多 3 个字符部分的列表”消息直到超时

循环,呃,为什么不循环?

我可以通过使用命令或 shell 模块在断点处插入逗号然后使用 {{ str | 来解决它split(",") }} 但纯 Ansible 解决方案会更好

编辑:错误主题的行为 set_fact won't update a fact while looping (breaking change)

例如

    - set_fact:
        str_parts: "{{ str|batch(3)|map('join') }}"

给予

  str_parts:
  - abc
  - def
  - g

可以select只匹配项目,例如

    - set_fact:
        str_parts: "{{ str|batch(3)|map('join')|select('match', '^.{3}$') }}"

给予

  str_parts:
  - abc
  - def