I am writing regular expression for removing newlines after every tag closing like "%}\n" for template strings. But it shouldn't remove when the content is in between the {% verbatim %}content{% endverbatim %} tag and also shouldn't remove newline after {% endverbatim %} if any present.
I tried this :
import re
def my_function(template_string):
replacement_string = template_string
found = re.search("{%\s*verbatim\s*%}(\s*.*\s*){%\s*endverbatim\s*%}", template_string, re.DOTALL)
replacement_string = re.sub("%}\n","%}", replacement_string, re.DOTALL)
replacement = "{%% verbatim %%}%s{%% endverbatim %%}" % found.group(1)
pattern = re.compile("{%\s*verbatim\s*%}(\s*.*\s*){%\s*endverbatim\s*%}", re.DOTALL)
result_string = pattern.sub(replacement, replacement_string)
return result_string
I used this string to test this regex:
"This is test string\n {% set var=2 %}\n {% verbatim %}\n Inside verbatim 1 {% set var2=4%}\n {% endverbatim %} {% set value=10%}\n {% verbatim%} Inside verbatim 2 {% set new_val=13%}\n {% endverbatim %}\n ..."
template_string = "This is test string\n {% set var=2 %}\n {% verbatim %}\n Inside verbatim 1 {% set var2=4%}\n {% endverbatim %} {% set value=10%}\n {% verbatim%} Inside verbatim 2 {% set new_val=13%}\n {% endverbatim %}\n ..."
my_function(template_string)
output of function above:
'This is test string\n {% set var=2 %} {% verbatim %}\n Inside verbatim 1 {% set var2=4%}\n {% endverbatim %} {% set value=10%}\n {% verbatim%} Inside verbatim 2 {% set new_val=13%}\n {% endverbatim %}
...'
Result I want:
'This is test string\n {% set var=2 %} {% verbatim %}\n Inside verbatim 1 {% set var2=4%}\n {% endverbatim %} {% set value=10%} {% verbatim%} Inside verbatim 2 {% set new_val=13%}\n {% endverbatim %}\n ...'