如何将地址解析为其各个组件?

Gre*_*reg 3 c# regex parsing html-agility-pack

我的任务是构建一个解析特定网页的解析器,以便我们的员工可以将他们的用户数据批量导入我们公司的网站.

我已经利用HtmlAgilityPack来解析页面,我已将其关联table rowtable data被推送到我Map班级的属性中.

然而,一让我感到很悲伤.由于各种各样的原因,地址栏是我身边的荆棘.

样本数据:

6313 SW 203rd Ave <br> Portland, OR 97224
16600 Lomita Way <br> El Dorado Hills, CA 95762
PO Box #42 <br> Hampton Bays, NY 11946
Run Code Online (Sandbox Code Playgroud)

这些地址中的每一个都是这样包装的(显然地址可能因我们导入用户的客户而异):

<tr>
     <td> 6313 SW 203rd Ave <br> Portland, OR 97224 </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现一个正则表达式将其拆分到适当的区域,因此可以将其分配给相关属性:

public string Unit { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是地址不能提供很多锚定:

问题一: 如果我停下来,<br>那么我只是将线分开.没有完全分裂成适当的部分.

问题二: 与单个逗号相同的问题.

问题三: 如果我锚定到数值,因为Zip可能对加拿大无效,并且可能根据街道名称错误地拆分.

分隔地址项目的最佳方法是什么?用正则表达式?

Bra*_*ner 5

解析地址很难; 真的很难.地址没有真正统一的格式,特别是跨国界.您使用单一RegEx进行此操作的可能性极低.

有关一些示例和更深入的解释,请参阅此其他帖子. 如何从文本和组件中解析自由形式的街道/邮政地址