【问题标题】:How to parse street address with Regex?如何使用正则表达式解析街道地址?
【发布时间】:2015-07-24 21:35:48
【问题描述】:

我正在研究一个正则表达式,以按街道号码、街道名称、城市、州和邮政编码解析完整地址。

我想出了一个非常好的正则表达式,它适用于大多数情况,但是,有几种情况它会失败。我需要帮助来改进它。这是我目前拥有的

Pattern pattern = Pattern.compile("^([\\d-]{0,}[\\s-]{0,}[\\d/]+)[\\s]{0,}");

如果街道地址以没有附加字母的街道号码开头,则街道地址的格式很好。例如:

  • 123 Street Address, CA, 55555 工作正常
  • 但是123 4th Street Address, CA, 55555 会导致:

      1234 => street number
      th Street => street name
    

我对解析地址进行了大量研究,我提出的这个解决方案几乎是我找到的最简单的解决方案。只是需要更多的调整。提前致谢。

【问题讨论】:

  • 有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。
  • 在欧洲,我们将街道命名为“Britxon 2201”或“1945 胜利 5”(5 是门牌号)。回答你的问题:你没有。
  • 由于地址内容和格式的巨大差异,地址不是“常规的”——这是使用正则表达式处理信息的一个不可或缺的因素。本文详述:smartystreets.com/articles/…

标签: android regex street-address


【解决方案1】:

您不应将所有街道地址分解为一个正则表达式。您最好使用多个正则表达式处理街道地址以涵盖广泛的场景,例如

  • 123 Stackoverflow方式
  • 第五大道 5000 号
  • 1 Hacker Way Building 5

【讨论】:

  • 这就是我最终所做的。除了我的正则表达式之外,我还添加了三种不同的场景,一切正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
相关资源
最近更新 更多