我正在使用mistune来解析一些文本,将文档编号超链接到内部站点上的文档管理系统。使用https://github.com/lepture/mistune上的wiki_link示例,我找到了用双方括号括起来的任何东西,并创建了一个iwl锚(来自HP/iManage/自主的互织链接协议)。这已经足够好用了,但是,我试图用一个doc#前缀(在#和数字之间加或不加一些空格)来标识数字。因此,如果文本显示为looking at doc# 25487657 as a sample...,则re.compile参数将根据前面的'doc#‘标识该数字(范围从低1000到数十亿)。我可以在output_interwoven_link方法中处理#上的拆分,但在正则表达式中遇到了困难。
我一直依赖搜索引擎来获得一个regex表达式的例子来解决我的regex问题,所以我没有能力自己制作这个表达式。我现在如何使用双方括号完成此操作,如下所示:
from mistune import Renderer, InlineGrammar, InlineLexer, Markdown
import re
import copy
class InterwovenLinkRenderer(Renderer):
def interwoven_link(self, docnum):
return '<a href="iwl:dms=dmssrv11&lib=Active&num=%s&ver=1&latest=1&command=opencmd">%s</a>' % (docnum, docnum)
class InterwovenLinkInlineLexer(InlineLexer):
def enable_interwoven_link(self):
self.rules.interwoven_link = re.compile(
r'\[\[' # [[
r'([\d]+?)' # Document Number
r'\]\](?!\])' # ]]
#r'''(doc#[\d]+?)'''
)
self.default_rules = copy.copy(InlineLexer.default_rules)
self.default_rules.insert(3, 'interwoven_link')
def output_interwoven_link(self, m):
text = m.group(1)
#doc, docnum = text.split('#')
return self.renderer.interwoven_link(text)
@register.filter(name='parse')
def parse(value=None):
if value:
renderer = InterwovenLinkRenderer()
inline = InterwovenLinkInlineLexer(renderer)
# enable the feature
inline.enable_interwoven_link()
markdown = Markdown(renderer, inline=inline)
return markdown(value)
else:
return False对我可以使用的东西有什么建议吗?
发布于 2016-02-22 11:00:32
如果要匹配字符串"doc#“后面的任何数字,则正则表达式为doc# (\d+)
https://stackoverflow.com/questions/35544657
复制相似问题