错误的降价分析器只匹配我的表情模式的第一次出现

2024-05-14 20:11:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直试图在mistune (markdown parser in python)中添加一个“emoji”语法,但不幸的是我没有成功。我对正则表达式不是很有经验,所以我的正则表达式可能有问题,但我就是搞不清楚是什么。我的有点基于我在mistune中找到的那些。问题是,mistune只会匹配第一个模式(比如,字面上是块中的第一个),并且第一个匹配之后的每个emoji模式都会作为普通文本处理。这是我想出的代码:

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>

我非常感谢您的任何意见/帮助。你知道吗


Tags: textselfreinitdefmistunethiskwargs

热门问题