Literals PyParsing:是否可以全局抑制所有文本?

Literals PyParsing:是否可以全局抑制所有文本?,literals,pyparsing,Literals,Pyparsing,我有一个简单的数据集要用以下行进行解析: R1 (a/30) to R2 (b/30), metric 30 我需要的上述数据如下: R1, a, 30, R2, 192.168.0.2, 30, 30 我可以用pyparsing轻松解析所有这些内容,但我要么在输出中得到一堆文本,要么在解析语法中明确地说Literal(thing).suppress(),这会让人厌烦 理想情况下,我想为上述内容编写语法,如: Word(alphanums) + '(' + Word(alphanums) +

我有一个简单的数据集要用以下行进行解析:

R1 (a/30) to R2 (b/30), metric 30
我需要的上述数据如下:

R1, a, 30, R2, 192.168.0.2, 30, 30
我可以用pyparsing轻松解析所有这些内容,但我要么在输出中得到一堆文本,要么在解析语法中明确地说
Literal(thing).suppress()
,这会让人厌烦

理想情况下,我想为上述内容编写语法,如:

Word(alphanums) + '(' + Word(alphanums) + '/' + Word(nums) + ... etc.
并让文字标记被忽略。我可以说
.suppressAllLiterals()
之类的话吗

注:

  • PyParsing的新功能
  • 我已经阅读了文档和5或6个示例
  • 搜索谷歌

谢谢

您可以在
parseRelation
上使用此方法-导入PyParse后立即调用它:

from pyparsing import ...whatever...
ParserElement.inlineLiteralsUsing(Suppress)
现在,解析器中的所有字符串文本都将被包装在
Suppress
对象中,并被排除在结果之外,而不是默认的
Literal


(有一天,当我可以打破向后兼容性时,我可能会将此设置为v3.0中的默认设置。)

Hello@Paul,感谢您的回复!我尝试过这个方法——它似乎适用于内联使用的字符串(例如,
pp.Word(…)+“somestring”+pp.Word(…)
),而不适用于已经标记为pp.Literal的内容(例如,如果我将
'somestring'
替换为
myLiteral
)。这个小改动对语法的清晰性有很大帮助。再次感谢您花时间,非常感谢。当然,您可以总是将do
Suppress(myLiteral)
或just
myLiteral.Suppress()
。您也可以使用
Suppress(“blah”)创建一个被抑制的文字
,Suppress类将为您创建文字。谢谢Paul,原始答案非常有用,因为我的语法中包含了一组我想要抑制的文字。谢谢其他选项。