как jinja2 удаляет все буквенно-цифровые и специальные символы?

#python #xslt #jinja2

#python #xslt #jinja2

Вопрос:

Попытка удалить все специальные и буквенно-цифровые символы из строки в jinja2.

XSLT:

   <xsl:variable name="splChar">abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$amp;amp;%^*()_ .[]{}|~`:;",'.?amp;<amp;>=
    </xsl:variable>
    <xsl:value-of select="translate($str,$splChar,'')" />
  

jinja2:

   {% str | replace("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$amp;amp;%^*()_ .[]{}|~`:;",'.?", "")  %} 
  

Комментарии:

1. Является ли пользовательский фильтр вариантом для вас?

2. К сожалению, платформа, над которой я работаю, не может реализовать пользовательский фильтр, я должен был упомянуть об этом

3. Итак, речь идет не о XSLT. Вы просто используете язык в качестве примера.

4. Конечно, но я перевожу с xslt на jinja2.

Ответ №1:

Вот решение с regex_replace .

Он заменяет все символы, которые не являются ( ^ ) буквенно-цифровыми ( A-Za-z0-9 ), ничем ( "" ):

 {% test_string | regex_replace ("[^A-Za-z0-9]","") %}
  

Со следующим test_string : 'AAAB©©c\oTT$e#Teste00-4?' ,
он возвращает AAABcoTTeTeste004 , как и ожидалось!

Комментарии:

1. Вы уверены, что у нас есть regex_replace функция, доступная в Jinja?

2. Вы правы. Кажется, что regex_replace это фильтр Ansible!