我正在尝试使用以下方法将部分标准化的街道地址解析为其组件pyparsing
。我想要非贪婪地匹配可能有 N 个令牌长的街道名称。
例如:
444 PARK GARDEN LN
应该解析为:
number: 444
street: PARK GARDEN
suffix: LN
我该如何使用 PyParsing 来做到这一点?这是我的初始代码:
from pyparsing import *
def main():
street_number = Word(nums).setResultsName('street_number')
street_suffix = oneOf("ST RD DR LN AVE WAY").setResultsName('street_suffix')
street_name = OneOrMore(Word(alphas)).setResultsName('street_name')
address = street_number + street_name + street_suffix
result = address.parseString("444 PARK GARDEN LN")
print result.dump()
if __name__ == '__main__':
main()
但是当我尝试解析它时,街道后缀会被默认的贪婪解析行为吞噬。
使用否定,~
,检查是否即将到来street_name
实际上是一个street_suffix
.
from pyparsing import *
street_number = Word(nums)('street_number')
street_suffix = oneOf("ST RD DR LN AVE WAY")('street_suffix')
street_name = OneOrMore(~street_suffix + Word(alphas))('street_name')
address = street_number + street_name + street_suffix
result = address.parseString("444 PARK GARDEN LN")
print result.dump()
此外,你不have to use setResultsName
,您可以简单地使用上面的语法。恕我直言,它会带来更清晰的语法定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)