Фильтр регулярных выражений - PullRequest
0 голосов
/ 02 октября 2018

Получил набор тегов с именем tags_json в виде

 [u'03fb9e77138602b41feb8f667f04cc8998a1fd00', u'1575c845a43685b674f54c5cfccd2850c34502ff', u'v0.2.1']

и хотел бы получить только те из них, которые указывают на версию, т.е. v0.2.1.Вот почему я создал регулярное выражение и использовал фильтр regex_search

- set_fact: 
release_tags: "{{ tags_json | map('regex_search','\\b\\v(?:[0-9]{1,3}\\.){2}[0-9]{1,3}\\b') | select('string') | list }}"

, но при перечислении я получаю только пустые строки без совпадений.Предположим, что само регулярное выражение хорошо, но не может получить правильный результат (список тегов, начинающихся с "v" и xyz).

1 Ответ

0 голосов
/ 02 октября 2018

Вам необходимо удалить любой экранирующий символ перед v и использовать

r'\bv(?:[0-9]{1,3}\.){2}[0-9]{1,3}\b'

Или, чтобы соответствовать всей строке,

r'^v(?:[0-9]{1,3}\.){2}[0-9]{1,3}$'

Обратите внимание, что \v соответствует \x0B символ.

По сути, следите за тем, что вы избегаете, некоторые буквальные символы при выходе из него образуют последовательность выхода из регулярного выражения и прекращают сопоставлять эти символы буквально.См. Python re документы :

Большинство стандартных экранирований, поддерживаемых строковыми литералами Python, также принимаются анализатором регулярных выражений:

\a \b \f \n\r \t \u \U\v \x \\

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...