gpt4 book ai didi

python - pyparsing 匹配指定文字的任意组合

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:58 25 4
gpt4 key购买 nike

例子:我有文字“alpha”、“beta”、“gamma”。如何让 pyparsing 解析以下输入:

alpha
alpha|beta
beta|alpha|gamma

给定的输入可以通过使用给定集合中的一个或多个非重复文字来构造,用“|”分隔。将不胜感激有关设置 pyparsing 的建议。

最佳答案

对 Each 使用“&”运算符,而不是“+”或“|”。如果您必须全部拥有,但顺序不可预测,请使用:

Literal('alpha') & 'beta' & 'gamma'

如果某些可能会丢失,但每个最多使用一次,则使用 Optionals:

Optional('alpha') & Optional('beta') & Optional('gamma')

糟糕,我忘记了'|'分隔符。一种宽松的解析器是使用 delimitedList:

delimitedList(oneOf("alpha beta gamma"), '|')

这将允许您的任何或所有选择,但不能防止重复。使用解析操作可能是最简单的:

itemlist = delimitedList(oneOf("alpha beta gamma"), '|')
def ensureNoDuplicates(tokens):
if len(set(tokens)) != len(tokens):
raise ParseException("duplicate list entries found")
itemlist.setParseAction(ensureNoDuplicates)

这对我来说是最简单的方法。

编辑:

最近版本的 pyparsing 引入了解析时条件,使这种解析操作更容易编写:

itemlist = delimitedList(oneOf("alpha beta gamma"), '|')
itemlist.addCondition(lambda tokens: len(set(tokens)) == len(tokens),
"duplicate list entries found")

关于python - pyparsing 匹配指定文字的任意组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3398660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com