【发布时间】:2013-08-27 04:21:15
【问题描述】:
我正在尝试将经过验证的地址拆分为基本组成部分(单元编号、街道编号、街道名称等)。为此,我正在通过字符串向后(从右到左)工作:
- 匹配 [A-Z'-] 字符 => 街道名称
- 匹配 [\d-]+[A-Za-z]{0,1} => 街道编号(这匹配诸如 10-12 或 11B 之类的东西,只有 0 或 1 个字母)
- 将字符串的其余部分与单元号匹配
现在,我可以编写三个正则表达式模式来进行匹配。我不确定的是如何使用它们。这将用于地址的批处理。
我的想法是:
- 在地址上运行每个模式并将每个匹配项保存在适当的地址对象属性中
- 某种匹配/替换以在每一步之后缩短字符串(我打算使用向前看和向后看)
关于如何最有效地使用正则表达式最有帮助的任何建议。
编辑 正如建议的那样,我使用组来代替。如果有人想看看我想出了什么:
(?<unit>(.*))\s(?<number>([\d-]+[A-Za-z]{0,1}))\s+(?<name>([\sA-Za-z'-]+$))
注意:这是针对一种非常特殊的地址格式,专门针对我的需要。
【问题讨论】:
-
您可能会发现以下信息很有用:Mailing Standards of the United States Postal Service Publication 28 - Postal Addressing Standards。德克萨斯州奥斯汀有一个“E 49 1/2 St”,根据出版物,门牌号也可以是小数。
-
谢谢,但我不是美国的,我们有一个市场标准的地址验证产品,可以在保存时去掉 x/y 类型的地址(尽管我们在写地址时确实使用了它们) )。
标签: .net regex vb.net performance