使用ansible进行部署时,我需要删除一个尾随def foo(obj: Sized): pass
foo([1, 2, 3, 4]) # ok
foo([2, 3, 4, 5]) # ok
子字符串的字符串。
仅当-p
在最后时,字符串somemachine-prod-p
才会变为somemachine-prod
。
我看到我可以和Jinja一起使用的子串函数不能满足我的需要,因为我需要去除字符串的结尾,而不是开头。
想法?
答案 0 :(得分:36)
找到它。
如果有人想知道:
{% if name.endswith('-p') %}
{{ name[:-2] }}
{% else %}
{{ name }}
{% endif %}
答案 1 :(得分:20)
有一个更好的“oneliner”:{{ name | regex_replace('-p$','') }}
。
答案 2 :(得分:5)
对于简单的子字符串...
"{{var_name[start:end]}}"
其中开始是开始位置(偏移量0),结束是结束位置(偏移量1)...似乎!
此问题的标题表明,仅想从变量中获取子字符串。而且大多数其他搜索结果都具有相似的标题,但会给出特定的响应,例如拆分路径等。这是针对像我一样难以找到这样基本内容的人。
答案 3 :(得分:0)
来自文档 你可以把它包装成条件
truncate(s, length=255, killwords=False, end='...', leeway=None)
返回字符串的截断副本。长度由第一个参数指定,默认为 255。如果第二个参数为真,过滤器将按长度剪切文本。否则它将丢弃最后一个字。如果文本实际上被截断,它将附加一个省略号(“...”)。如果你想要一个不同于“...”的省略号,你可以使用第三个参数来指定它。长度仅超出第四个参数中给出的容差范围的字符串将不会被截断。
{{ "foo bar baz qux"|truncate(9) }}
-> "foo..."
{{ "foo bar baz qux"|truncate(9, True) }}
-> "foo ba..."
{{ "foo bar baz qux"|truncate(11) }}
-> "foo bar baz qux"
{{ "foo bar baz qux"|truncate(11, False, '...', 0) }}
-> "foo bar..."
较新 Jinja 版本的默认余量是 5,之前是 0,但可以全局重新配置。