编写一些正则表达式来帮助处理街道地址。但是,我不确定正则表达式是否是解决此问题的正确方法。
我的街道地址如下:
7829 Hollywood Ave
我想写一个说这个(伪代码)的正则表达式:
match a NUMBER then ONE OR MORE WORDS then a STREET TYPE
在javascript中,这个正则表达式看起来像这样:
/^\d+\s+.*(\sAve|\sStreet|\sSt.|..800 MORE ABBREVIATIONS!...)/ig
正如您所看到的,因为有800+ postal street "type" abbreviations,这个正则表达式会非常大。我必须使用计算机代码实际生成它,这没关系,但我不确定这是解决这类问题的好方法吗?
我可以看到这个问题到了我想写一个试图将街道NAME与数据库中的一个匹配的正则表达式。然后我真的不明白标准的正则表达式在这种情况下是如何工作的:
match a NUMBER then **A STREET NAME IN A DATABASE** then a STREET TYPE
感谢任何输入!
答案 0 :(得分:3)
如果所有地址都像<number> <name> <type>
一样简单,那么生活将变得非常简单 - 但它们不是,所以事实并非如此。
街道地址对于单个正则表达式而言过于复杂,例如5/45 East 51st St或215-217 Long Island Way。您需要:打破它并解析部分,让用户在特定字段中输入地址,或者只接受他们给你的内容。
答案 1 :(得分:1)
您可以捕获街道类型,然后检查捕获的内容是否在街道类型列表中。
正则表达式将成为:
/^\d+\s+.*\s+(.*)
或
/^\d+\s+.*\s+(?P<streettype>.*)
答案 2 :(得分:1)
使用捕获组。我不确定JS,但在java中你做:
/ ^(\ d +)\ s +(。*)(\ w +)/ ig
你可以在括号之间获取组的内容(使用Matcher.getGroup(int))。
稍后,您将这些字符串与数据库匹配。
无论如何......为什么?也许街道类型证明了这一点,但限制街道名称只会为您增加更多的工作并给用户带来不便(如果街道的名称与数据库中的名称不完全相同,或者数据库的更新不够)。希望用户指明他的方向吗?如果用户不想,他可以提供虚假数据。用户希望你有他的方向?然后你可以相信用户能够正确地写出来......