我一直试图在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>
我非常感谢您的任何意见/帮助。你知道吗
我不知道python,但这应该可以工作(至少在regex101上可以)
见https://regex101.com/r/iFHgTZ/1
相关问题 更多 >
编程相关推荐