pyparsing 匹配指定文字的任意组合
例子: 我有文字“alpha”、“beta”、“gamma”。如何使 pyparsing 解析以下输入:
alpha
alpha|beta
beta|alpha|gamma
可以使用给定集合中的一个或多个非重复文字(以“|”分隔)来构造给定输入。关于设置 pyparsing 的建议将不胜感激。
Example:
I have the literals "alpha", "beta", "gamma". How do I make pyparsing parse the following inputs:
alpha
alpha|beta
beta|alpha|gamma
The given input can be constructed by using one or more non-repeating literals from a given set, separated by "|". Advice on setting up pyparsing will be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用“&” Each 的运算符,而不是“+”或“|”。如果您必须拥有全部,但顺序不可预测,请使用:
如果可能缺少某些内容,但每个最多使用一次,则使用可选:
哎呀,我忘记了“|”分隔符。一种宽松的解析器是使用 delimitedList:
这将允许您的任何或所有选择,但不能防止重复。使用解析操作可能是最简单的:
这对我来说是最简单的方法。
编辑:
最新版本的 pyparsing 引入了解析时条件,以使这种解析操作更容易编写:
Use the '&' operator for Each, instead of '+ or '|'. If you must have all, but in unpredicatable order use:
If some may be missing, but each used at most once, then use Optionals:
Oops, I forgot the '|' delimiters. One lenient parser would be to use a delimitedList:
This would allow any or all of your choices, but does not guard against duplicates. May be simplest to use a parse action:
This feels like the simplest approach to me.
EDIT:
Recent versions of pyparsing have introduced parse-time conditions to make this kind of parse action easier to write: