如何在 pyparsing 中与 OneOrMore 等进行非贪婪(回溯)匹配?

2024-01-13

我正在尝试使用以下方法将部分标准化的街道地址解析为其组件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(使用前将#替换为@)

如何在 pyparsing 中与 OneOrMore 等进行非贪婪(回溯)匹配? 的相关文章

随机推荐

  • 符号|查看 Flask 教程

    我正在为 Flask 框架编写一个教程 网址为http blog miguelgrinberg com post the flask mega tutorial part iii web forms http blog miguelgrin
  • Android 6.0 权限变更回调

    我想知道当用户在 Android 6 0 上更改应用程序设置中的权限时是否有某种方式可以收到通知 我一直在寻找这个答案 但没有运气 您知道广播接收器和某些特定意图是否可能吗 或者也许有一些黑客可以实现这一目标 根据这个答案 https st
  • 在开发、登台和生产之间同步 Drupal 站点

    通常在 Drupal 6 x 站点启动后 我会让人们开始注册并输入他们自己的内容 每当需要升级时 生产中的数据库都会复制到开发版 然后在开发版上完成开发 然后推送到登台以供客户批准 当网站最终准备上线时 出现了一个问题 生产服务器具有最新的
  • 为什么 ng-scope 添加到我的部分视图的 javascript 内联中并使警报不起作用?

    我正在使用 AngularJs 和模板系统 我想向每个模板添加特定的内联 javascript 脚本 添加与所选选项卡相关的警报框 主页 列表 设置 Html 渲染 但是添加了 ng scope 并且当您更改选项卡时没有任何警报 我在这里提
  • jQuery datepicker altFormat 不显示

    我有一个 jQuery 日期选择器 它根据卖家的语言偏好进行本地化 每个日期选择器自定义都有不同的日期格式 但我希望提交表单时的输入采用特定的格式进行解析 我尝试在日期选择器上使用 altFormat 将其设置为 mm dd yy 但我不希
  • 角度 ui-router 维护选项卡之间的状态

    想知道保留选项卡之间状态的最佳方法 我使用引导选项卡和角度用户界面路由器 我在其中一个选项卡中有一个谷歌地图 并且不想在用户选择该选项卡时重新加载地图 请指教 Thanks 我认为本期讨论了您正在寻找的内容 https github com
  • php mysql asc/desc 顺序

    TABLE timeslot id timeslot times 1 09 00 2 09 30 3 10 00 4 10 30 5 11 00 bookslot id id timeslot date b ref 1 2 2010 02
  • 如何让Android模拟器启动更快

    我目前一直坚持使用 Atom CPU 桌面来开发 Android 应用程序 有哪些方法可以改善其启动时间 运行模拟器时 我可以看到模拟器使用的核心数量只有一个 我从 Eclipse ADT 插件中运行模拟器 如何让模拟器使用两个核心而不是一
  • 只需单击标签即可双击

    我有一个标签 并且单击它时正在运行一些功能 但是 当单击事件发生时 双击事件完成 然后我的函数运行两次 你可以看一个简单的例子here http jsfiddle net vgWGT 2 HTML
  • iOS 7 master有导航栏提示时的细节布局

    我在 iOS 7 中遇到布局问题 要重现 请创建一个简单的主从应用程序并将此行插入MasterViewController m self navigationItem prompt Master 这在DetailViewController
  • 正则表达式允许非 ASCII 和外文字母吗?

    是否可以创建一个正则表达式来允许非ascii字母与拉丁字母一起使用 例如中文或希腊符号 例如允许A汉语AbN汉语 我目前有以下内容 w d w d s 只允许使用拉丁字母 In NET p L d p L d s 相当于你的正则表达式 另外
  • Angular2 5 分钟安装错误 - 未定义需求

    我正在做Angular2 5 分钟快速入门 https angular io docs ts latest quickstart html 现在教程已经进行了大约一半 我已经正确设置了以下文件 索引 html 应用程序组件 ts 应用程序
  • 实现观察者模式时出现的问题:“成员引用基类型 ________ 不是结构或联合”

    我一直在实现一个准系统观察者模式 但遇到了一个有点神秘的错误 成员引用基类型 Observer 不是结构或联合 我认为这与我使用模板有关 但我仍然对模板感到相当不舒服 这是有问题的代码 为了简化事情而删除了大多数 cons 析构函数 主题界
  • 在Android中绘画时如何遮盖一个简单的区域?

    下面是一个简化的描述 想象一下 我有一个 View 类 它可以绘制一面墙的图片 并且我想在绘制它时切出一个窗口 假设我扩展该 View 类并重写其dispatchDraw 方法来执行以下操作 首先绘制背景 如果有的话 可以通过窗户看到 接下
  • 有没有办法像oracle中的rownum一样获取Mysql中的行号[重复]

    这个问题在这里已经有答案了 有没有办法像oracle中的rownum一样获取Mysql中的行号 如果没有那么有什么间接的方法吗 请建议 直到MySQL终于支持现代SQL http modern sql com slides 获得类似内容的唯
  • 如何标记和测量斑点的大小?

    我正在用Python学习图像分析 我只是一个初学者 我能够编写代码 我在下面分享 来检测此纳米颗粒图像中的斑点 纳米颗粒 我可以使用以下方法检测到有 10 个纳米粒子cv2 connectedComponents 但现在我需要 用数字标记每
  • 单击标题上的按钮时阻止引导手风琴打开

    我有两个操作按钮位于手风琴的标题上 如下所示 当我单击这些按钮之一时 它会切换手风琴的状态 我尝试过e preventDefault and e stopImmediatePropagation 没有结果 这是jsfiddle https
  • 如何使用垂直对齐:居中;适当地?

    我想让我的列表 导航 与图像 徽标 的中心对齐 我尝试使用vertical align middle 但是当我左右浮动图像时 我无法让它工作 这是我的代码 HTML div img src logo png ul li a href Ite
  • 如何以最简单的方式在 V 2010Express C# 中创建 MRU?

    首先 我是 C 编程的新手 我需要尽快创建一个简单的 MRU 好吧 问题是我尝试查看一些在线示例 但我发现它们有点太令人困惑了 那么 是否任何人都可以在工具条菜单项中创建 最近使用 部分 而无需进入那些复杂的代码 例如 我将无法理解这些东西
  • 如何在 pyparsing 中与 OneOrMore 等进行非贪婪(回溯)匹配?

    我正在尝试使用以下方法将部分标准化的街道地址解析为其组件pyparsing 我想要非贪婪地匹配可能有 N 个令牌长的街道名称 例如 444 PARK GARDEN LN 应该解析为 number 444 street PARK GARDEN