我一直试图添加一个表情符号'语法到mistune (markdown parser in python)但不幸的是我没有成功。我对正则表达式没有经验,所以我的可能有些不对劲,但我无法弄清楚是什么。我有点基于我在mistune中找到的那些。问题是,mistune只匹配第一个模式(比如,字面意思是块中的第一个),并且第一个匹配后的每个表情符号模式都作为普通文本处理。这是我提出的代码:
import re
import mistune
class EmojiRenderer(object):
def emoji(self, text):
return "<emoji>%s</emoji>" % text
class EmojiInlineLexer(mistune.InlineLexer):
def __init__(self, **kwargs):
super(EmojiInlineLexer, self).__init__(**kwargs)
self.default_rules.insert(0, "emoji")
self.rules.emoji = re.compile(r'^:([a-zA-Z0-9\+\-_]+):', re.I)
def output_emoji(self, m):
text = self.output(m.group(1))
return self.renderer.emoji(text)
class MarkdownRenderer(mistune.Renderer, EmojiRenderer):
def __init__(self, **kwargs):
super(MarkdownRenderer, self).__init__(**kwargs)
renderer = MarkdownRenderer()
inline = EmojiInlineLexer(renderer=renderer)
markdown = mistune.Markdown(renderer=renderer, inline=inline)
demo_text = """
:thumbs_up: *this works*
this doesn't work :thumbs_down:
:smile: :cry:ing
"""
print(markdown(demo_text))
这是输出:
<p><emoji>thumbs_up</emoji> <em>this works</em></p>
<p>this doesn't work :thumbs_down:</p>
<p><emoji>smile</emoji> :cry:ing</p>
但预期输出应为
<p><emoji>thumbs_up</emoji> <em>this works</em></p>
<p>this doesn't work <emoji>thumbs_down</emoji></p>
<p><emoji>smile</emoji> <emoji>cry</emoji>ing</p>
我非常感谢任何输入/帮助。
答案 0 :(得分:1)