Как разобрать простую встроенную разметку (т. Е. * Полужирный *) в Python? - PullRequest
4 голосов
/ 06 февраля 2009

Как реализовать синтаксический анализатор (в Python) для подмножества викитекста, модифицирующего текст, а именно:

*bold*, /italics/, _underline_ 

Я конвертирую его в LaTeX, поэтому конвертация из:

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

до:

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

Хотя нет ничего конкретного в том, что это преобразование в LaTeX (особенно за исключением вложенных случаев, таких как "* bold / italics * whatami /" => "textbf {bold \ textit {italics} whatami}").

Я посмотрел на существующие библиотеки разметки , но они (а) не совсем тот вики-язык, который я хотел бы, и (б) казалось бы, не справились с этой задачей.

Я рассмотрел реверс-инжиниринг Creoleparser , но я хотел бы знать, какие предложения есть у других, прежде чем я предприму эти усилия.

Спасибо!

1 Ответ

7 голосов
/ 06 февраля 2009

Если ваш язык маленький, регулярные выражения могут быть наименее болезненным решением:

>>> 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}."
...