我正在编写一个小型转换程序,它将降低的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执行此操作。
答案 0 :(得分:3)
pyparsing不是很熟练,但我会尝试使用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)