كيف يمكن لمواصلة محلية بسيطة (أي *Bold *) ، في بيثون؟
سؤال
كيف يمكن للمرء تنفيذ محلل (في بيثون) لمجموعة فرعية من 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}."
لا تنتمي إلى StackOverflow