Markdown语法与pyparsing,使空格正确

时间:2013-12-12 17:21:02

标签: python parsing pyparsing

我正在编写一个小型转换程序,它将降低的Markdown语法转换为html(作为一种学习练习),但我无法正确地找到间距:

from pyparsing import *

strong  = QuotedString("**")
text    = Word(printables)
tokens  = strong | text
grammar = OneOrMore(tokens)

strong.setParseAction(lambda x:"<strong>%s</strong>"%x[0])

A = "The **cat** in the **hat**."
print ' '.join(grammar.parseString(A))

我得到了什么:

The <strong>cat</strong> in the <strong>hat</strong> .

我想要的是什么:

The <strong>cat</strong> in the <strong>hat</strong>.

是的,这可以在没有 pyparsing的情况下完成,并且存在其他实用程序来执行完全相同的操作(例如pandoc),但我想知道如何使用pyparsing执行此操作。

1 个答案:

答案 0 :(得分:3)

不是很熟练,但我会尝试使用transformString()代替parseString()leaveWhitespace()匹配代币,例如:

from pyparsing import *

strong  = QuotedString("**").leaveWhitespace()
text    = Word(printables).leaveWhitespace()
tokens  = strong | text
grammar = OneOrMore(tokens)

strong.setParseAction(lambda x:"<strong>%s</strong>"%x[0])

A = "The **cat** in the **hat**."
print grammar.transformString(A)

它产生:

The <strong>cat</strong> in the <strong>hat</strong>.

更新Paul McGuire指出的改进版本(请参阅评论):

from pyparsing import *

strong  = QuotedString("**")

strong.setParseAction(lambda x:"<strong>%s</strong>"%x[0])

A = "The **cat** in the **hat**."
print strong.transformString(A)