我正在将Salt与jinja2“ regex_search”配合使用,并尝试从存档文件名中提取一些数字(发行版)。然后使用该值创建一个包含它的符号链接。我已经尝试使用“列表”,“连接”和其他过滤器进行不同的组合以摆脱此Unicode字符,但未成功。
示例: “ release_info”变量的值为“ release-name-0.2345.577_20190101_1030.tar.gz”,我只需要获取点之间的数字即可。
这是sls文件的相应部分:
symlink to current release {{ release_info }}:
file.symlink:
- name: /home/{{ component.software['component_name'] }}/latest
- target: /home/{{ component.software['component_name'] }}/{{ release_info |regex_search('(\d+\.\d+\.\d+)') }}
- user: support
- group: support`enter code here`
预期结果是“ /home/support/0.2345.577”,但我有“ /home/support/(u'0.2345.577',)”
如果我尝试通过管道传递“ yaml”或“ json”过滤器,例如:
{{ release_info |regex_search('(\d+\.\d+\.\d+)') | yaml }}
我有:
/home/support/[0.2345.577]
这不是我想要的。
PS 我已经掌握了,但是在我看来,这并不是一种可行的方法。只是解决方法。
{{ release_info |regex_search('(\d+\.\d+\.\d+)') |yaml |replace('[','') |replace(']','') }}
答案 0 :(得分:0)
Hello Todor,欢迎您使用Stack Overflow!
我尝试了您发布的示例,这是如何实现您想要的
注意:为了支持其他可能具有更多数字的可能性,我对regex模式进行了一些更改,例如0.1.2.3.4等,但是当然可以使用您的模式,只要它对您有用如预期的那样。
解决方案1:
{{ release_info | regex_search("(\d(\.\d+){1,})") | first }}
使用first
之前的结果:
('0.2345.577', '.577')
使用first
后的结果:
0.2345.577
解决方案2:
{{ release_info | regex_search("(\d\.\d+\.\d+)") | first }}
使用first
之前的结果:
('0.2345.577',)
使用first
后的结果:
0.2345.577
first
是Jinja中的内置过滤器,可以返回序列中的第一项。您可以检查List of built-in filters以获得有关其他过滤器的更多信息