【发布时间】:2013-07-04 01:17:30
【问题描述】:
我的问题
我正在尝试爬取US House of Representatives Site 上的各个链接,以查找所有列出的个人的华盛顿地址。问题是华盛顿地址的格式不时变化。有时会出现项目符号、管道、换行符和断点标记,使其难以匹配。
我正在尝试抓取许多页面以检索大致相似的地址:
忽略特殊的空格。这只是为了显示字符串部分的相似性
1433 朗沃斯大厦办公楼华盛顿特区 20515 332 Cannon HOB 华盛顿特区 20515 1641 朗沃斯办公大楼华盛顿特区 20515 1238大炮H.O.B. (回线) 华盛顿特区 20515 8293 Longworth House 办公大楼 • 华盛顿特区 • 20515 8293 Longworth House 办公楼 |华盛顿特区 | 20515每一个都将单独返回,并被大量其他文本和 html 标记包围。地址甚至可以在地址本身中包含
或
。
我想做的是从源字符串中捕获第一个匹配项,并将其设置为变量的值。据我了解,最好使用正则表达式。
更新:
在详细了解了这些日子可能出现的各种方式之后,我决定最好使用不太严格的表达方式。这些地址已显示为项目符号、管道和换行符。也许传达以下内容的表达式是最好的:
[数字][anything]["washington"][anything][DC|D.C.][anything][五个数字]
显然这太松了。 anything 块正在引入段落,而我只是对允许任何内容的几个字符感兴趣。
到目前为止,我未能成功匹配以下地址(这些只是众多地址中的一小部分)
【问题讨论】:
-
很难,因为每个人的地址格式似乎都完全不同。我认为最好的选择是首先从您的输入中删除所有 HTML 标签,然后在我的回答中应用下面提到的正则表达式。那应该会更好。我不懂 PHP,所以我不能告诉你如何去除 HTML 标签,但这肯定已经在 SO 上得到了回答。
-
当然不是答案,而是一些您可能会感兴趣的阅读,因为您亲身遇到地址问题:mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses
标签: php regex street-address