3

Ruby (newb) と Regex を使用して、住所から番地を解析しようとしています。簡単なものには問題はありませんが、次の点について助けが必要です。

'6223 1/2 S フィゲロア ST' ==> 'S フィゲロア ST'

助けてくれてありがとう!!

更新:

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

@pesto から '221B Baker Street' ==> 'Baker Street'

4

7 に答える 7

2

これにより、文字列に当たるまで文字列の前にあるものがすべて削除されます。

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

「221Bベーカー街」のようなものが可能であれば、もっと複雑なものを使用する必要があります。これは機能するはずです:

street_name = address.gsub(/^((\d[a-zA-Z])|[^a-zA-Z])*/, '')
于 2009-06-18T14:25:40.233 に答える
1

通りの名前も数字にすることができますか?例えば

1234 45TH ST

あるいは

1234 45 ST

上記の最初のケースに対処できますが、2番目のケースは困難です。

住所をスペースで分割し、文字を含まない主要なコンポーネントをスキップして、残りを結合します。私は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
于 2009-06-18T14:37:23.270 に答える
1

別のstackoverflowの回答セットがあります: 文字列から使用可能な番地、市区町村、都道府県、郵便番号を解析します

私はグーグル/ヤフーデコーダーのアプローチが最善だと思いますが、あなたが話しているアドレスの頻度/数に依存します-そうでなければ、選択された答えがおそらく最高でしょう

于 2009-06-18T14:32:37.460 に答える
1

痛い!標準化された住所で作業していない限り、住所を単独で解析するのは非常に厄介です。この理由は、家番号と呼ばれることが多い「プライマリ ナンバー」が文字列内のさまざまな場所にある可能性があるためです。たとえば、次のようになります。

  1. RR 2 ボックス 15 (RR は Rural Route、HC、HCR などでもかまいません)
  2. 私書箱 17
  3. 12B-7A
  4. NW95E235

それは些細な取り組みではありません。アプリケーションのニーズにもよりますが、正確な情報を取得するには、住所確認 Web サービスを利用するのが最善の方法です。この機能を提供するプロバイダーは少数です。

完全な開示のために、私は SmartyStreets の創設者です。住所を検証および標準化して、住所が本物であることを確認し、プライマリ/家番号部分を取得できるようにする、住所検証 Web サービス APIがあります。質問がある場合は、個人的に私に連絡してください。

于 2011-10-13T01:44:24.030 に答える
0

/[^\d]+$/キャプチャグループを使用しないことを除いて、同じものと一致します。

于 2009-06-18T14:22:00.257 に答える
0

今後の参考のために、正規表現を支援する優れたツールはhttp://www.rubular.com/です。

于 2009-06-18T14:25:27.787 に答える