有人可以指出一个使用 pyparsing 从更大的集合中处理所需数据的示例吗?aa Parse Action 是使用“if”语句的正确方法吗?
考虑一下关于 Pyparsing 的 Oreilly 小册子中给出的大学和游戏分数表。它有佛罗里达州立大学和其他大学的数据。假设佛罗里达州、佛罗里达州和南佛罗里达州都在随机位置的表格中。您将如何处理佛罗里达学校的结果?
稍后在文档中对所有数据使用循环,我可以将 if 语句放在那里,但我觉得我可能不明白何时使用 Parse Action。
有人可以指出一个使用 pyparsing 从更大的集合中处理所需数据的示例吗?aa Parse Action 是使用“if”语句的正确方法吗?
考虑一下关于 Pyparsing 的 Oreilly 小册子中给出的大学和游戏分数表。它有佛罗里达州立大学和其他大学的数据。假设佛罗里达州、佛罗里达州和南佛罗里达州都在随机位置的表格中。您将如何处理佛罗里达学校的结果?
稍后在文档中对所有数据使用循环,我可以将 if 语句放在那里,但我觉得我可能不明白何时使用 Parse Action。
您可以使用解析操作向已匹配定义的解析规则的数据添加进一步验证,但可能会使某些语义规则失败。这是一个在匹配任何整数的表达式上使用解析操作的情况,但解析操作只允许偶数:
from pyparsing import *
integer = Word(nums).setParseAction(lambda t:int(t[0]))
even_integer = integer.copy()
def onlyEvensAllowed(tokens):
if tokens[0] % 2 != 0:
# reject this integer by raising a ParseException
raise ParseException('only even numbers allowed')
even_integer.addParseAction(onlyEvensAllowed)
sample = "92873 234 2934 2934 292394 239847 293879237 2398 293492"
number = even_integer | integer.suppress()
print OneOrMore(number).parseString(sample)
印刷:
[234, 2934, 2934, 292394, 2398, 293492]
在大学比赛分数的情况下,您可以执行类似的过滤解析操作,仅接受包含字符串“Florida”的大学名称,如果不接受则引发 ParseException。