如何摆脱特殊字符'(u'

时间:2019-01-09 15:27:43

标签: jinja2 salt-stack salt

我正在将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(']','') }}

1 个答案:

答案 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以获得有关其他过滤器的更多信息