Ansible中Jinja正则提取多词字符串各单词首字符失效如何解决
问题根因
你当前写法的核心问题有两个:
regex_search过滤器默认仅返回字符串中第一个匹配正则的结果,不会遍历匹配所有符合规则的内容,所以只能拿到第一个单词的首字母。- 你写的正则
([a-zA-Z]|\d+)逻辑本身没有锚定单词边界,就算换成全局匹配也无法精准定位每个单词的首字符。
修正方法
将过滤器替换为支持全局匹配的regex_findall,搭配锚定单词边界的正则\b[a-zA-Z0-9]匹配所有单词首字符,最后用join过滤器把匹配到的首字母列表拼接成字符串即可。
注意YAML/Jinja环境下反斜杠需要做转义处理,正则里的\b要写成\\b。
修正后的完整配置如下:
Input: first_name: Pepper last_name: Von Pig Jinja: backup_username: "{{ first_name }}{{ last_name | regex_findall('\\b[a-zA-Z0-9]') | join }}"
效果验证
- 示例输入下,
regex_findall会匹配得到列表['V', 'P'],拼接后和first_name组合最终输出PepperVP,和预期结果一致。 - 针对多词复姓场景(比如last_name为
Van Der Sar),该写法会自动提取所有单词首字母得到VDS,无需额外调整规则。
内容的提问来源于stack exchange,提问作者Squiggs.
相关产品推荐
相关产品推荐

