从较大的集合中选择一些数据

时间:2013-02-02 01:01:28

标签: pyparsing

有人能指出我使用pyparsing从更大的集合中处理所需数据的示例吗? Parse Action是使用“if”语句的正确方法吗?

考虑Oreilly关于Pyparsing的小册子中给出的大学和游戏分数表。它有佛罗里达州和其他大学的数据。让我们说佛罗里达州,佛罗里达州和南佛罗里达州都在随机位置。您如何处理佛罗里达州学校的结果?

稍后在文档中对所有数据使用循环,我可以将if语句放在那里,但我觉得我可能不明白何时使用Parse Action。

1 个答案:

答案 0 :(得分:0)

您可以使用解析操作为与已定义的解析规则匹配的数据添加进一步的验证,但可能会使某些语义规则失败。下面是一个解析操作用于匹配任何整数的表达式的情况,但解析操作只允许整数:

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。