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
)。这个小改动对语法的清晰性有很大帮助。再次感谢您花时间,非常感谢。当然,您可以总是将doSuppress(myLiteral)
或justmyLiteral.Suppress()
。您也可以使用Suppress(“blah”)创建一个被抑制的文字
,Suppress类将为您创建文字。谢谢Paul,原始答案非常有用,因为我的语法中包含了一组我想要抑制的文字。谢谢其他选项。