Mistune Markdown解析器仅匹配我的表情符号模式的第一次出现

时间:2017-02-09 09:20:01

标签: python regex markdown emoji

我一直试图添加一个表情符号'语法到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>

我非常感谢任何输入/帮助。

1 个答案:

答案 0 :(得分:1)

我不知道python但这应该有效(至少在regex101上有效)

:([a-zA-Z0-9\+\-_]+):

请参阅https://regex101.com/r/iFHgTZ/1