我用一些簡單的Markdown文本來玩弄和學習一般的Pyparsing和語法。我幾乎立即遇到了一個問題,即解決問題。我試圖解析一個簡單版本的CommonMark規範的重點。在這種設置中,嵌套的重點是允許的,讓Pyparsing:嵌套Markdown重點
*foo *bar* baz*
應該給:
<em>foo <em>bar</em> baz</em>
我使用遞歸定義來匹配這個嘗試,但它不工作。下面是一些示例代碼:
from pyparsing import *
text = Word(printables,excludeChars="*")
enclosed = Forward()
emphasis = QuotedString("*").setParseAction(lambda x: "<em>%s</em>" % x[0],contents=enclosed)
enclosed << emphasis | text
test = """
*foo *bar* bar*
"""
print emphasis.transformString(test)
但我回來的是這樣的:
<em>foo </em>bar<em> bar</em>
原諒我noobishness;有人能指引我走向正確的方向嗎?
編輯:
針對abarnert最偉大的探測問題,我將提供澄清。我只是在玩耍,所以我可以使用任意限制的符號形式。我假設只有一個'*'出現,並且它們不會彼此相鄰。這留下了空白,以消除歧義:*沒有跟着空白打開重點,並且*沒有先空白空間關閉它。
即使這樣,我不知道如何繼續Pyparsing。某種基於堆棧的方法,推開*並在驗證爲關閉時彈出它們? Pyparsing如何做到這一點?還是有更有效的方法?
我認爲最簡單的方法來做你想要的版本是放棄自動空白處理和對待空白作爲一個令牌......但我不知道。我會讓我的潛意識去仔細研究它,如果你仍然陷入困境,沒有其他人會回到你身邊,我會在稍後再對它進行一次重擊。 – abarnert 2014-09-11 17:24:38
只要你說「把空白當作一個標記」,我認爲pyparsing開始不是最好的選擇。隱含的空白跳過是其魅力的關鍵部分。 – PaulMcG 2014-09-11 22:49:05