Python 限制特定pyparsing表达式中的新行

Python 限制特定pyparsing表达式中的新行,python,pyparsing,Python,Pyparsing,类似问题: 我喜欢pyparsing的特性,它通常忽略空白,但是我的语法中有一些表达式,它们必须写在同一行上 问题是:如何限制特定表达式的换行? 我在文档中看到了setWhitespaceChars方法,该方法应该可以做到这一点,但它似乎不起作用(参见下面的示例) 例子 我需要解析以下表达式: { ref: 4121! } 在这里,大括号可以用新行格式化,但是ref部分必须是一行 我定义语法: >>将pyparsing导入为pp >>>ref=pp.CaselessLiteral('

类似问题:


我喜欢pyparsing的特性,它通常忽略空白,但是我的语法中有一些表达式,它们必须写在同一行上

问题是:如何限制特定表达式的换行?

我在文档中看到了
setWhitespaceChars
方法,该方法应该可以做到这一点,但它似乎不起作用(参见下面的示例)

例子 我需要解析以下表达式:

{
    ref: 4121!
}
在这里,大括号可以用新行格式化,但是
ref
部分必须是一行

我定义语法:

>>将pyparsing导入为pp
>>>ref=pp.CaselessLiteral('ref:')+pp.Word(pp.nums)+'!'
>>>大括号='{'+ref+'}'
现在我尝试更改
ref
的空格:

>>ref.setWhitespaceChars({'','\t'})
{{'ref:'W:(0123…}”!“}
>>>白沙参考号
{'\t','}
但是,当我尝试解析test_字符串(格式错误)时,它会毫无错误地解析它:

测试字符串='ref:\n123\n!' >>>ref.parseString(测试字符串) (['ref:','123','!'],{}) 我做错了什么

UPD: 似乎我需要对每个元素应用
setWhitespaceChars
,这些元素必须保持在同一行:

>>将pyparsing导入为pp
>>>ref=pp.CaselessLiteral('ref:')+pp.Word(pp.nums)。setWhitespaceChars('\t\r')+pp.Literal('!')。setWhitespaceChars('\t\r'))
>>>s='ref:\n123\n!'
>>>参考解析字符串
回溯(最近一次呼叫最后一次):
...
pyparsing.ParseException:应为W:(0123…),在字符4处找到“\n”(第1行,第5列)

这增加了太多的混乱,我可能最好在开始时调用
setDefaultWhitespaceChars
,然后在每个表达式周围添加换行符元素,我几乎认为我不需要使用pyparsing。还有其他解决方案吗?

请看最近的这个问题,如果它是你的问题的副本,那么你可以在你的问题中引用它。@PaulMcG是的,我终于有时间深入研究这个问题和答案了。我想,它的功能和我问的差不多。我在开头添加了问题的链接。期待新版本!:)请看这个最近的问题,如果它是你的问题的副本,那么你可以在你的问题中引用它。@PaulMcG是的,我终于有时间深入研究这个问题和答案了。我想,它的功能和我问的差不多。我在开头添加了问题的链接。期待新版本!:)