Как избавиться от специального символа '(u' - PullRequest
0 голосов
/ 09 января 2019

Я использую Salt с jinja2 "regex_search" и пытаюсь извлечь несколько цифр (версия выпуска) из имени файла архива. Затем используйте значение, чтобы создать символическую ссылку, которая содержит его. Я пробовал разные комбинации, используя «list», «join» и другие фильтры, чтобы избавиться от этого символа Unicode, но безуспешно.

Пример: Переменная "release_info" получает значение "release-name-0.2345.577_20190101_1030.tar.gz", и мне нужно получить только цифры между точками.

Вот соответствующая часть файла sls:

symlink to current release {{ release_info }}:
  file.symlink:
    - name: /home/{{ component.software['component_name'] }}/latest
    - target: /home/{{ component.software['component_name'] }}/{{ release_info |regex_search('(\d+\.\d+\.\d+)') }}
    - user: support
    - group: support`enter code here`

Ожидаемый результат: "/home/support/0.2345.577", но у меня есть "/home/support/(u'0.2345.577',)"

Если я пытаюсь передать фильтр "yaml" или "json", например:

{{ release_info |regex_search('(\d+\.\d+\.\d+)') | yaml }}

У меня есть:

/home/support/[0.2345.577]

это не то, что я ищу.

PS У меня это есть, но мне кажется, что нет подходов. Просто обходной путь.

{{ release_info |regex_search('(\d+\.\d+\.\d+)') |yaml |replace('[','') |replace(']','') }}

1 Ответ

0 голосов
/ 16 января 2019

Привет, Тодор, и добро пожаловать в стек!

Я попробовал пример, который вы опубликовали, и вот как добиться того, чего вы хотите

Примечание: я немного изменил шаблон регулярных выражений, чтобы поддержать любые другие возможности, которые могут иметь больше цифр, например, 0.1.2.3.4 и т. Д., Но, конечно, вы можете использовать свой шаблон, пока он работает для вас как и ожидалось.

Решение 1:

{{ release_info | regex_search("(\d(\.\d+){1,})") | first }}

Результат перед использованием first:

('0.2345.577', '.577')

Результат после использования first:

0.2345.577

Решение 2:

{{ release_info | regex_search("(\d\.\d+\.\d+)") | first }}

Результат перед использованием first:

('0.2345.577',)

Результат после использования first:

0.2345.577

first - это встроенный фильтр в jinja, который может возвращать первый элемент в последовательности. Вы можете проверить Список встроенных фильтров для получения дополнительной информации о других фильтрах

...