针对此问题的解决方法是使用正向搜索并对结果使用过滤器来删除负向搜索匹配项。以下是使用正向搜索和过滤器来解决此问题的示例代码:
- hosts: all
tasks:
- name: Search for all lines containing "apple" but not "pie"
debug:
msg: "{{ (my_string | regex_findall('^(?=.*apple)(?!.*pie).*$')) | list }}"
vars:
my_string: |
I like apple
I don't like pie
But I like apple pie
这将输出字符串'['I like apple']”,即仅包含'apple”而不包含'pie”的行。首先,正向搜索使用正前向查找,匹配包含'apple”的行。接下来,负向搜索使用否定前瞻,匹配不包含'pie”的行。最后,过滤器将结果转换为列表并且只保留正向匹配的行。