2013-02-02 61 views
1

有人能指出我使用pyparsing從一個更大的集合中處理所需數據的例子嗎? Parse Action是使用「if」語句的正確方法嗎?從一個更大的集合中選擇一些數據

考慮Pyparsing上Oreilly小冊子給出的學院和遊戲成績表。它有佛羅里達州和其他大學的數據。假設佛羅里達州,佛羅里達州和南佛羅里達州都在隨機位置上。你將如何處理佛羅里達學校的結果?

在文檔後面的循環用於所有的數據,我可以把我的if語句放在那裏,但我覺得也許我不明白何時使用Parse Action。

回答

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。

相關問題