she*_*rri 3 python regex json ansible
我在ansible中使用regex_replace过滤器。我可以让它工作,但它真的很麻烦。这就是我正在做的
- set_fact:
variable: "{{ value | regex_replace("84","89") | regex_replace("76","78") | regex_replace("45","23"}}"
Run Code Online (Sandbox Code Playgroud)
有没有一种方法,我可以通过管道 regex_replace 一次并用多个值替换多个模式。
问:“我可以通过管道 regex_replace 一次并用多个值替换多个模式吗?”
答:不,这是不可能的。但是,您可以循环执行此操作。例如,
vars:
my_var: ABCDEFGH
tasks:
- set_fact:
my_var: "{{ my_var|regex_replace(item.regex, item.replace) }}"
loop:
- {regex: 'A', replace: '1'}
- {regex: 'C', replace: '3'}
- {regex: 'E', replace: '5'}
- debug:
var: my_var
Run Code Online (Sandbox Code Playgroud)
给出
my_var: 1B3D5FGH
Run Code Online (Sandbox Code Playgroud)
您可以最小化代码。例如,下面的任务给出相同的结果
- set_fact:
my_var: "{{ my_var|regex_replace(item.0, item.1) }}"
loop:
- ['A', '1']
- ['C', '3']
- ['E', '5']
Run Code Online (Sandbox Code Playgroud)
问:“我们能否使其不将替换的值作为下一个循环项的输入?”
答:是的。我们可以。在这种情况下更好的结构是字典。例如,
my_var: AB1
regrep:
'A': '1'
'1': 'C'
Run Code Online (Sandbox Code Playgroud)
预期结果是“1BC”。我们不希望第一个字符替换为“C”。下面的 Jinja 表达式给出了你想要的
- set_fact:
my_var: |
{% for x in my_var %}
{% if x in regrep %}
{{ regrep[x] }}
{%- else %}
{{ x }}
{%- endif %}
{%- endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7608 次 |
| 最近记录: |