Python Mistune Markdown解析器只匹配我的表情模式的第一次出现

Python Mistune Markdown解析器只匹配我的表情模式的第一次出现,python,regex,markdown,emoji,Python,Regex,Markdown,Emoji,我一直在尝试添加“表情符号”语法,但不幸的是,我没有成功。我对正则表达式没有太多经验,所以我的正则表达式可能有问题,但我就是不知道是什么。我的是一个有点根据的那些我发现在。问题是,mistune只会匹配第一个模式(比如,字面上是块中的第一个),而第一个匹配后的每个表情模式都会作为普通文本处理。这是我想出的代码: import re import mistune class EmojiRenderer(object): def emoji(self, text): ret

我一直在尝试添加“表情符号”语法,但不幸的是,我没有成功。我对正则表达式没有太多经验,所以我的正则表达式可能有问题,但我就是不知道是什么。我的是一个有点根据的那些我发现在。问题是,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))
重新导入
输入失调
类EmojiRenderer(对象):
def表情符号(自我,文本):
返回“%s”%text
类emojiinlineexer(mistune.inlineexer):
定义初始(自我,**kwargs):
超级(emojiinlineexer,self)。\uuuuuu初始值(**kwargs)
self.default_rules.insert(0,“表情符号”)
self.rules.emoji=re.compile(r'^:([a-zA-Z0-9\+\-\+):',re.I)
def输出表情符号(自我,m):
文本=自输出(m.group(1))
返回self.renderer.emoji(文本)
类MarkdownRenderer(mistune.Renderer、EmojiRenderer):
定义初始(自我,**kwargs):
超级(MarkdownRenderer,self)。\uuuuuuuuuuuuuuuuuuu初始(**kwargs)
renderer=MarkdownRenderer()
内联=emojiinlineexer(渲染器=渲染器)
markdown=mistune.markdown(渲染器=渲染器,内联=内联)
demo_text=“”
:竖起大拇指:*这很有效*
这不起作用:拇指朝下:
:微笑:哭泣:哭泣
"""
打印(降价(演示文本))
这是输出:

竖起大拇指,这很有效

这不起作用:拇指朝下:

微笑:哭泣:哭泣

但预期产出应该是

竖起大拇指,这很有效

这根本不管用

笑哭


我非常感谢您的任何意见/帮助。

我不懂python,但这应该可以工作(至少在regex101上可以)


请参见

您使用的
^
,这意味着
字符串/行的开头
@Fallenhero仍然保持相同的输出。我尝试了一些正则表达式的变体,但它们都有相同的结果(或者甚至不匹配)。@Fallenhero实际上,Mistune通过将已经匹配的文本从字符串前面剥离来改变文本,因此每个正则表达式必须以
^
开头,以强制它从字符串开头开始。看见
:([a-zA-Z0-9\+\-_]+):