2009-02-06 5 views
3

Comment peut-on créer un analyseur (en Python) pour un sous-ensemble de wikitext qui modifie le texte, à savoir:Comment analyser un balisage en ligne simple (c'est-à-dire * gras *), en Python?

*bold*, /italics/, _underline_ 

Je convertir en LaTeX, de sorte que la conversion est de:

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

à:

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

Bien qu'il n'y ait rien de particulier à ce sujet étant une conversion à LaTeX (notamment à l'exception des cas imbriqués comme "* gras/italique * whatami /" => « textbf {bo ld \ textit {italique} whatami} ").

J'ai regardé existing markup libraries, mais ils sont (a) pas tout à fait la langue du wiki que je voudrais, et (b) apparemment accablé pour ce problème.

J'ai considéré la rétro-ingénierie Creoleparser, mais j'aimerais savoir quelles suggestions d'autres ont avant que j'entreprenne cet effort.

Merci!

Répondre

6

Si votre langue est petite, les expressions régulières peut être la solution la moins douloureuse:

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

+1 ... par exemple, la mise en œuvre Python Markdown est fait en grande partie avec regex recherche et remplacement. –

+0

+1 juste pour utiliser regex. Je devrais sérieusement l'apprendre. – Rodrigo

+2

Certaines personnes, confrontées à un problème, pensent "Je sais, j'utiliserai des expressions régulières". Maintenant, ils ont deux problèmes. --Jamie Zawinski – ptman

Questions connexes