Ansible regex_replace 在正则表达式匹配后插入值

Ansible regex_replace insert value after regex match

我有一个版本变量,我需要拆分并插入一个 .中间

我试过了

ansible localhost  -e version=300 -m debug -a "msg={{ version  | regex_replace('\d{1,2}', '.\g<0>' ) }}"

但是 o/p 是

TASK [debug] ********************************************************************************************************************************************************************************************************************************
ok: [localhost] =>
  msg: .30.0

有一个。首先添加 .30.0 。我可以使用 regex_repace 删除第一个。在那之后。 但是还有其他更好的方法吗?为什么 pattern 将小数点放在首位?

Q: "Why is pattern putting the decimal point in the first place?"

A:正则表达式 \d{1,2} 匹配一个或两个数字。给定字符串 300,此正则表达式匹配前两位数字 30。它将被替换为 .\g<0> 从而给出

.30

下一场比赛是 0,因为只剩下一个数字。替换给出

.0

放在一起结果是

.30.0

Q: "Is there any way I can directly insert "." (dot) after the second place? ie 30.0?"

答:比如剧

- hosts: localhost
  vars:
    my_string: '300'
  tasks:
    - debug:
        msg: "{{ my_string[0:2] ~ '.' ~ my_string[2:] }}"
    - debug:
        msg: "{{ my_string[:-1] ~ '.' ~ my_string[-1] }}"

给予

"msg": "30.0"
"msg": "30.0"