从街道地址剥离街道号

问题描述 投票:3回答:7

[使用Ruby(newb)和Regex,我正在尝试从街道地址解析街道号。我没有遇到麻烦的问题,但是我需要一些帮助:

''6223 1/2 S FIGUEROA ST'==>'S FIGUEROA ST'

感谢您的帮助!

更新:

''6223 1/2 2ND ST'==>'2ND ST'

来自@pesto'221B贝克街'==>'贝克街'

ruby regex street-address
7个回答
2
投票

这将删除字符串开头的所有内容,直到碰到一个字母:

street_name = address.gsub(/^[^a-zA-Z]*/, '')

[如果有可能使用“ 221B Baker Street”之类的东西,那么您就必须使用更复杂的东西。这应该工作:

street_name = address.gsub(/^((\d[a-zA-Z])|[^a-zA-Z])*/, '')

2
投票

组匹配:

.*\d\s(.*)

[如果您还需要考虑公寓号:

.*\d.*?\s(.*)

将使用123A的街道名称

只要字符串中没有其他数字,那应该去除前面的数字(和空格)。只需捕获第一组(。*)


2
投票

哦!除非您使用标准化地址,否则单独解析地址会非常麻烦。这样做的原因是,通常被称为门牌号的“主要​​号码”可以位于字符串中的各个位置,例如:

  1. RR 2方框15(RR也可以是乡村路线,HC,HCR等)
  2. 邮政信箱17
  3. 12B-7A
  4. NW95E235

这不是一件容易的事。根据您的应用程序的需求,最好的选择是获取accurate信息是利用地址验证Web服务。有少数提供此功能的提供商。

为了全面披露,我是SmartyStreets的创始人。我们有一个address verification web service API,它将验证您的地址并使其标准化,以确保它是真实的,并允许您获取主要/门牌号码部分。非常欢迎您提出问题与我个人联系。


1
投票

还有另外一个stackoverflow答案:Parse usable Street Address, City, State, Zip from a string

我认为google / yahoo解码器方法是最好的,但是取决于您所谈论的频率/许多地址-否则,选择的答案可能是最好的


1
投票

街道名称也可以是数字吗?例如:

1234 45TH ST

甚至

1234 45 ST

您可以处理上述第一种情况,但第二种情况很困难。

我会将地址分割成空格,跳过任何不包含字母的前导组件,然后将其余部分合并。我不了解Ruby,但这是一个Perl示例,它也突出了我的方法的问题:

#!/usr/bin/perl

use strict;
use warnings;

my @addrs = (
    '6223 1/2 S FIGUEROA ST',
    '1234 45TH ST',
    '1234 45 ST',
);

for my $addr ( @addrs ) {
    my @parts = split / /, $addr;

    while ( @parts ) {
        my $part = shift @parts;
        if ( $part =~ /[A-Z]/ ) {
            print join(' ', $part, @parts), "\n";
            last;
        }
    }
}

C:\Temp> skip
S FIGUEROA ST
45TH ST
ST

0
投票

/[^\d]+$/也将匹配相同的内容,除非不使用捕获组。


0
投票

http://www.rubular.com/供将来参考,一个很好的正则表达式帮助工具>

© www.soinside.com 2019 - 2024. All rights reserved.