удаление уличных номеров из уличных адресов

StackOverflow https://stackoverflow.com/questions/1012883

  •  06-07-2019
  •  | 
  •  

Вопрос

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

'6223 1/2 S УЛИЦА ФИГЕРОА' ==> 'S УЛИЦА ФИГЕРОА'

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

ОБНОВЛЕНИЕ (ы):

'6223 1/2 2-й УЛИЦЫ' ==> '2-я УЛИЦА'

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

Это было полезно?

Решение

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

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

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

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

Другие советы

Соответствие группы:

.*\d\s(.*)

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

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

Который позаботится о названии улицы 123А.

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

Есть еще один набор ответов stackoverflow:Анализировать полезный адрес улицы, город, штат, почтовый индекс из строки

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

Могут ли названия улиц быть числами?Например.

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. RR 2 Вставка 15 (RR также может быть Сельским маршрутом, HC, HCR и т.д.)
  2. Почтовый Ящик 17
  3. 12B-7A
  4. NW95E235
  5. и т.д.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top