Regex pattern for selecting an inverted word on a list of strings

The goal is to select all the lines of a list which do NOT contain a specific word.

For instance, “{{ files }}” contains a list of filenames. We need to select all the filenames which do not include the word ‘all’.

So with:

files:

  • aaaaaaaaaaa
  • bbbbbbbbbbb
  • cccccccccccc
  • d-all-ddddddd

The expected result would be:

files_filtered::

  • aaaaaaaaaaa
  • bbbbbbbbbbb
  • cccccccccccc

I unsuccessfully tried:

set_fact:
files_filtered: “{{ files | select(‘match’, ‘^(.^((?!all).).+)$’) | list }}”

The result is empty.

Any suggestion?

Use reject instead of select, and since you looking for containing use search instead of match.

   {{ files | reject('search', 'all') | list }}