Python re.search 对 Django 的帮助

Python re.search assistance for Django

我需要通过我正在自定义的 Django 自定义模板标签替换 html 字符串的一部分。

原始格式的字符串如下:

arg = "<a class='login-password-forget' tabindex='1' href='{% url 'account:pwdreset'%}'>Forgot your password?</a>"

我需要使用 re.search() 将 {% url 'account:pwdreset'%} 部分替换为 url 字符串。

我编写的代码很笨拙,如果能找到更好的实现方法,我将不胜感激。

url_string = re.search("{.*?}", arg)
url_string_inner = re.search("'(.+?)'", url_string.group())

add_html = SafeText(''.join([arg.split('{')[0], reverse(url_string_inner.group(1)), arg.split('}')[1]]))

!!更新!! 我运行的解决方案如下:

    url_string = re.search("{.*?}", arg)
    url_string_inner = re.search("'(.+?)'", url_string.group())
    add_html = SafeText(''.join([arg.split('{')[0], reverse(url_string_inner.group(1)), arg.split('}')[1]]))

谢谢四鸟的帮助

如果您只想用 'account:pwdreset' 替换部分,您可以将 re.sub 与捕获组一起使用,并在单引号之间的替换中使用该组

'{%\s*url '([^']*)'%}

Regex demo | Python demo

import re

pattern = r"'{%\s*url '([^']*)'%}"
s = "<a class='login-password-forget' tabindex='1' href='{% url 'account:pwdreset'%}>Forgot your password?</a>"
print(re.sub(pattern, r"''", s))

输出

<a class='login-password-forget' tabindex='1' href=account:pwdreset>Forgot your password?</a>