удаление номеров улиц с адресов улиц - PullRequest
3 голосов
/ 18 июня 2009

Используя Ruby (newb) и Regex, я пытаюсь отделить номер улицы от адреса улицы. У меня нет проблем с простыми, но мне нужна помощь:

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

Спасибо за помощь !!

UPDATE (ы):

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

и от @pesto 'Бейкер-стрит 221Б' ==> 'Бейкер-стрит'

Ответы [ 7 ]

2 голосов
/ 18 июня 2009

Это лишит все, что находится перед строкой, пока не попадет в букву:

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

Если возможно иметь что-то вроде "Бейкер-стрит 221Б", тогда вам нужно использовать что-то более сложное. Это должно работать:

street_name = address.gsub(/^((\d[a-zA-Z])|[^a-zA-Z])*/, '')
2 голосов
/ 18 июня 2009

Групповое соответствие:

.*\d\s(.*)

Если вам также необходимо учесть номера квартир:

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

Что позаботится о названии улицы 123A

Это должно убрать числа спереди (и пробел), пока в строке нет других чисел. Просто запишите первую группу (. *)

1 голос
/ 13 октября 2011

Ой! Парсинг адреса сам по себе может быть очень неприятным, если вы не работаете со стандартными адресами. Причина этого в том, что «основной номер», который часто называют номером дома, может находиться в разных местах строки, например:

  1. RR 2 Box 15 (RR также может быть Сельский маршрут, HC, HCR и т. Д.)
  2. PO Box 17
  3. 12B-7A
  4. NW95E235
  5. и т.д.

Это не тривиальное начинание. В зависимости от потребностей вашего приложения для получения точной информации лучше всего использовать веб-службу проверки адреса. Есть несколько провайдеров, которые предлагают эту возможность.

В интересах полного раскрытия информации я являюсь основателем SmartyStreets. У нас есть API веб-службы проверки адреса , который проверит и стандартизирует ваш адрес, чтобы удостовериться, что он реальный, и позволит вам получить основную часть / номер дома. Вы можете связаться со мной лично с вопросами.

1 голос
/ 18 июня 2009

Могут ли названия улиц быть числами? Э.Г.

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
1 голос
/ 18 июня 2009

Существует еще один набор ответов stackoverflow: Разбор пригодного адреса, города, штата, почтового индекса из строки

Я думаю, что подход декодер Google / Yahoo лучше, но зависит от того, как часто / сколько адресов вы говорите - иначе выбранный ответ, вероятно, будет лучшим

0 голосов
/ 18 июня 2009

Для дальнейшего использования отличный инструмент для регулярных выражений: http://www.rubular.com/

0 голосов
/ 18 июня 2009

/[^\d]+$/ также будет соответствовать той же вещи, за исключением того, что без использования группы захвата.

...