【问题标题】:Regex: match address string if multiple words正则表达式:如果有多个单词,则匹配地址字符串
【发布时间】:2022-02-19 05:21:34
【问题描述】:

免责声明:我从this answer 知道,正则表达式不适用于美国地址,因为它们不是常规的。但是,这是一个相当小的项目,我想看看我是否可以减少误报的数量。

我的挑战是区分(即匹配)“123 SOUTH ST”和“123 SOUTH MAIN ST”等地址。我能想出的最佳解决方案是检查定向词之后是否有超过 1 个词。

我的 python 正则表达式是这样的:

^(NORTH|SOUTH|EAST|WEST)(\s\S*\s\S*)+$

解释:

  • ^(NORTH|SOUTH|EAST|WEST) 匹配字符串开头的方向
  • (\s\S*\s\S*)+$ 尝试匹配一个空格、一个任意长度的单词、另一个空格和另一个任意长度的单词 1 次或多次

但我的表达似乎没有区分这两种术语。我的错误在哪里(除了对美国地址使用正则表达式)?

感谢您的帮助。

【问题讨论】:

  • 您需要捕获组值吗?这部分(\s\S*\s\S*)+ 将重复捕获组,在Python 中re 将捕获最后一次迭代的值。 \S* 也是可选的,并且也将只匹配 2 个空格字符(也可以匹配 2 个换行符)

标签: python regex


【解决方案1】:

您的正则表达式缺少地址开头的数字,并将可选字(在本例中为 MAIN)视为强制性的。试试这个

^\d+ (NORTH|SOUTH|EAST|WEST)((\s\S*)?\s\S*)+$

【讨论】:

  • 就是这样 - 谢谢!正则表达式是我对脚本的介绍,我总是很感激反馈。
  • 嗨!看起来这是你的第一个答案。我只是想让您知道,您可以用三个反引号 (```) 将代码示例括起来,以便很好地显示它们,并带有语法突出显示。感谢您的贡献!
  • 如果您已经在组中重复 \s\S* 的整个构造,那么在前面有一个可选的执行相同 (\s\S*)? 的构造似乎是不必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多