此代码有效:
from pyparsing import *
zipRE = "\d{5}(?:[-\s]\d{4})?"
fooRE = "^\!\s+.*"
zipcode = Regex( zipRE )
foo = Regex( fooRE )
query = ( zipcode | foo )
tests = [ "80517", "C6H5OH", "90001-3234", "! sfs" ]
for t in tests:
try:
results = query.parseString( t )
print t,"->", results
except ParseException, pe:
print pe
我遇到了两个问题:
1 - 如何使用自定义函数解析 token 。例如,如果我想使用一些自定义逻辑而不是正则表达式来确定数字是否为邮政编码。 而不是:
zipcode = Regex( zipRE )
也许:
zipcode = MyFunc()
2 - 如何确定字符串解析的内容。 “80001”解析为“zipcode”,但如何使用 pyparsing 确定它?我不是在解析字符串的内容,而是简单地确定它是哪种查询。
请您参考如下方法:
您可以分别使用 zipcode 和 foo,这样您就知道字符串匹配哪一个。
zipresults = zipcode.parseString( t )
fooresults = foo.parseString( t )
