有人可以帮我理解这些线路在做什么吗?
VAR_TOKEN_START = '{{'
VAR_TOKEN_END = '}}'
BLOCK_TOKEN_START = '{%'
BLOCK_TOKEN_END = '%}'
TOK_REGEX = re.compile(r"(%s.*?%s|%s.*?%s)" % (
VAR_TOKEN_START,
VAR_TOKEN_END,
BLOCK_TOKEN_START,
BLOCK_TOKEN_END
))
TOK_REGEX.split('{% each vars %}<i>{{it}}</i>{% endeach %}')
我不理解正则表达式上的%
。以及为什么我们将TOK_REGEX
变量表达式分开。
答案 0 :(得分:1)
这部分:
TOK_REGEX = re.compile(r"(%s.*?%s|%s.*?%s)" % (
VAR_TOKEN_START,
VAR_TOKEN_END,
BLOCK_TOKEN_START,
BLOCK_TOKEN_END
))
使用string formatting以更容易理解的方式构建正则表达式,而不仅仅是混乱的字符。 %
运算符将每个%s
替换为以下元组中相应字符串的内容。这允许代码的作者为正则表达式的{{
,}}
,{%
和%}
部分提供有意义的名称。
split
来电:
TOK_REGEX.split('{% each vars %}<i>{{it}}</i>{% endeach %}')
等效于具有编译模式的re.split
函数,查找与参数字符串中的正则表达式匹配的所有文本,并返回除以匹配项的部分列表 - 除了因为正则表达式处于捕获中group(正则表达式字符串中的括号),正则表达式匹配也包含在列表中。