nestedExpr
可能會保留換行符嗎?在nestedExpr中保留換行符
下面是一個簡單的例子:
import pyparsing as pp
# Parse expressions like: \name{body}
name = pp.Word(pp.alphas)
body = pp.nestedExpr('{', '}')
expr = '\\' + name('name') + body('body')
# Example text to parse
txt = '''
This \works{fine}, but \it{
does not
preserve newlines
}
'''
# Show results
for e in expr.searchString(txt):
print 'name: ' + e.name
print 'body: ' + str(e.body) + '\n'
輸出:
name: works
body: [['fine']]
name: it
body: [['does', 'not', 'preserve', 'newlines']]
正如你可以看到,第二個表達式的主體(\it{ ...
)被解析儘管在體內的新行,但我會預期結果將每行存儲在一個單獨的子陣列中。這個結果使得不可能用單行與多行來區分主體內容。
我不認爲它比包裝本身作者的回答更好! :)對不起,如果我的建議有點笨拙,但我可以問在這一個;爲什麼你在'body'的定義中使用'name'?我承認我的問題並不完全清楚,但我真正追求的是方括號之間的_raw_內容,理想情況下不受任何解析規則或標記器的影響,所以我可以稍後分別解析它們(可能隨後使用不同的解析規則,具體取決於關於父母的內容)。 – Sheljohn
爲了匹配任何*,代替'name',你可能會使用類似'pp.Word(pp.printables,excludeChars =「{}」)''的東西。您可能還必須用'pp.originalTextFor'來包裝以獲取原始字符串內容。歡迎來到pyparsing! – PaulMcG