0

我正在为 python-markdown 编写一个扩展,它应该将我的一些自定义标签中的文本放入一个样式化的 div 中。

我创建了一个简单的内联模式类,它将匹配的表达式封装在 div 标记中。我的正则表达式如下:r'(\{mytag_start\})(.+)(\{mytag_end\})'然后在编译时由 markdown.inlinepatterns.Pattern 类放入"^(.*?)---(.*?)$"中,以便将 compile 方法称为re.compile("^(.*?)%s(.*?)$" %r'(\{mytag_start\})(.+)(\{mytag_end\})').

乍一看,这似乎可以解决问题,但是我注意到所有换行符都需要硬编码为<br>标签。

所以

{mytag_start}This code<br>
will work{mytag_end}

但是,以下代码破坏了整个降价

{mytag_start}This code

will not{mytag_end}

因此,我只是以纯文本形式未经处理的整个上述块。

我尝试向 the 提供 re.MULTILINE 和 re.DOTALL ,re.compile但没有帮助。有任何想法吗?

编辑: 是一个显示上述问题的示例扩展文件。然后我在我的 django 模板中使用{{ content:"mdx_MyExtension"}}.

4

1 回答 1

0

尝试使用非贪婪运算符(+紧随其后?):

r'(\{mytag_start\})(.+?)(\{mytag_end\})'

完整的正则表达式:

^(?:.*?)(\{mytag_start\})(.+?)(\{mytag_end\})(?:.*?)$

标志:

DOTALL、忽略大小写、多行

数据测试

blah 
blash
<h1>Title</h1>
{mytag_start}This code<br>
will work{mytag_end}
<b>bold</b>

{mytag_start}This code

will not{mytag_end}

输出 :

# Run findall
>>> regex.findall(string)
[(u'{mytag_start}', u'This code<br>\nwill work', u'{mytag_end}'), (u'{mytag_start}', u'This code\n\nwill not', u'{mytag_end}')]
于 2012-09-27T08:34:23.723 回答