正则表达式,分裂和Python

时间:2014-03-23 22:22:41

标签: python regex split

有人可以帮我理解这些线路在做什么吗?

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变量表达式分开。

1 个答案:

答案 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(正则表达式字符串中的括号),正则表达式匹配也包含在列表中。