您可以使用分析操作將進一步的驗證添加到與已定義的分析規則匹配的數據,但可能會失敗某些語義規則。這裏是一個解析的行動是對任何整數匹配的表達式中使用的情況下,但解析動作只允許偶數:
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。