كيف يمكن لمواصلة محلية بسيطة (أي *Bold *) ، في بيثون؟

StackOverflow https://stackoverflow.com/questions/521326

سؤال

كيف يمكن للمرء تنفيذ محلل (في بيثون) لمجموعة فرعية من wikitext التي تعدل النص ، أي:

*bold*, /italics/, _underline_ 

أقوم بتحويله إلى LaTex ، لذا فإن التحويل من:

Hello, *world*! Let's /go/.

إلى:

Hello \textbf{world}! Let's \textit{go}.

على الرغم من أنه لا يوجد شيء محدد حول كونه تحويل إلى LaTeX (لا سيما باستثناء حالات متداخلة مثل "* Bold /Mithics* Whatami /" => "textbf {Bold textit {italics} whatami}").

لقد نظرت إلى مكتبات الترميز الحالية, ، لكنهم (أ) ليسوا لغة ويكي التي أحبها ، و (ب) تغلبت على ما يبدو لهذه المشكلة.

لقد فكرت في الهندسة العكسية Creoleparser, ، لكني أود أن أعرف ما هي الاقتراحات التي يقدمها الآخرون قبل أن أجهد هذا الجهد.

شكرًا!

هل كانت مفيدة؟

المحلول

إذا كانت لغتك صغيرة ، فقد تكون التعبيرات العادية هي الحل الأقل إيلامًا:

>>> import re
>>> str = "Hello, *world*! Let's /go/."
>>> str = re.sub(r"\*([^\*]*)\*", r"\textbf{\1}", str)
>>> str = re.sub(r"/([^/]*)/",   r"\textit{\1}", str)
>>> str
"Hello, \textbf{world}! Let's \textit{go}."
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top