如何使Regex_replace与Ansible中的特殊字符匹配,并在其前面添加\?

时间:2017-10-09 22:36:26

标签: regex ansible

我正在尝试创建一个匹配URL中任何特殊字符的正则表达式,然后在它前面添加转义字符\。我创建了以下正则表达式,它正确地从字符串中捕获正确的字符,但它不会在特殊字符前面添加\。

For example - test-google.com would look like test\-google\.com

- hosts: localhost
  vars:
    site: "test-google.com"
    site2: "test.mywebsite.com"

  tasks:
   - name: Bad at regex
     debug: 
        msg: "{{ site | regex_replace('[^\\w]', '[^\\\w]') }}"

     register: regex

   - debug:
        msg: "{{ regex }}"

我尝试了'[^\\'\'w]'以及'\w'

我怎么能做到这一点?

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用

msg: "{{ site | regex_replace(r'\W', r'\\\g<0>') }}"

msg: "{{ site | regex_replace('\\W', '\\\\\\g<0>') }}"

这里,\W匹配任何非单词char,替换字符串包含\(在常规非原始字符串文字中用4个反斜杠表示,并且 原始字符串文字中的2个反斜杠),然后用替换后引用\g<0>表示整个匹配值。