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

How to get rid of special char '(u'

我将 Salt 与 jinja2 "regex_search" 一起使用,我尝试从存档文件名中提取一些数字(发行版)。然后使用该值创建一个包含它的符号链接。我已经尝试使用 "list"、"join" 和其他过滤器的不同组合来摆脱这个 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(']','') }}

你好 Todor,欢迎来到 Stack Overflow!

我已经尝试过您发布的示例,这里是如何实现您想要的

Note: I have changed the regex pattern a little in order to support any other possibilities that could have more digits e.g 0.1.2.3.4 and so on, but of course you can use your pattern as long as it works for you as expected.

解决方案 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 中的内置过滤器,可以 return 序列中的第一项。您可以查看 List of built-in filters 以获取有关其他过滤器的更多信息