1
mistune (markdown parser in python)에 '그림 이모'문법을 추가하려고했지만 불행히도 성공적이지 않았습니다. 나는 정규 표현식에 익숙하지 않기 때문에 내 문제가있을 수 있지만 무엇을 알아 내지 못하고있다. 내 것은 mistune에서 찾은 것들을 기반으로합니다. 문제는 mistune이 첫 번째 패턴 (글자 그대로 블록의 첫 번째 패턴)과 일치하며 첫 번째 일치 후 모든 이모티콘 패턴이 일반 텍스트로 처리된다는 것입니다. 이것은 내가 가지고 올 한 코드입니다 :Mistune Markdown 구문 분석기는 내 그림 이모티콘 패턴의 첫 번째 일치 항목과 만 일치합니다.
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>
내가 어떤 입력을 주셔서 감사합니다 정말 할 수 있어야 /도움.
를 참조 (적어도 그것은 regex101에 않습니다) 내가 파이썬 모르지만이 작동합니다'^''문자열/line' – Fallenhero
의 시작을 의미하는 @ Fallenhero 여전히 같은 출력. 정규 표현식의 몇 가지 변형을 시도했지만 모두 동일한 결과를 보였습니다 (또는 심지어 일치하지 않았습니다). –
@Fallenhero 사실, Mistune은 이미 일치하는 텍스트를 문자열의 앞쪽으로 스트라이핑하여 텍스트를 변경하므로 모든 정규식은 문자열 시작 부분에서 시작되도록 '^'으로 시작해야합니다. [코드] (https://github.com/lepture/mistune/blob/master/mistune.py#L563)를 참조하십시오. – Waylan