Как извлечь адрес из текста с помощью регулярных выражений в Ruby - PullRequest
1 голос
/ 03 марта 2010

Я пытаюсь извлечь адрес США из текста.

Поэтому, если у меня есть следующие варианты текста, я бы хотел извлечь часть адреса

Сегодняхороший день, чтобы встретиться в баре.адрес: 123 поддельная улица, Нью-Йорк, 23423-3423

 just came from 423 Elm Street, kk, 34223 ...had awesome time

бла-бла-бла-бла 23414 Fake Terrace, MM что-то еще

 experimented my teleporter to get to work but reached at 2423 terrace NY

Если кто-то может предоставить некоторые отправные точки, то я могу сформулировать это для других вариантов.

1 Ответ

6 голосов
/ 03 марта 2010

В какой-то момент вы бы уточнить, какой адрес вы считаете.

У адреса есть только номер улицы и название улицы?

У адреса есть название улицы и название города?

У адреса есть название города, название штата?

Имеется ли в адресе название города, сокращение штата и почтовый индекс? В каком формате находится почтовый индекс?

Легко увидеть, как быстро можно столкнуться с неприятностями.

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

возможное регулярное выражение

\d+.+(?=AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY)[A-Z]{2}[, ]+\d{5}(?:-\d{4})?

пример ввода

hello world this is me posting an address. please go to 312 N whatever st., New York NY 10001.

If you can find me there. I might be at 123 Invalid address.

Please send all letters to 115A Address Street, Suite 100, Google KS, 66601

42 NE Another Address, Some City with 9 digit zip, AK 55555-2143

Hope this helps!

соответствует

312 N whatever st., New York NY 10001
115A Address Street, Suite 100, Google KS, 66601
42 NE Another Address, Some City with 9 digit zip, AK 55555-2143

объяснение регулярного выражения

\d+                      digits (0-9) (1 or more times (matching the most amount possible))
.+                       any character except \n (1 or more times (matching the most amount possible))
(?=                      look ahead to see if there is:
  AL|AK|AS|...             'AL', 'AK', 'AS', ... (valid state abbreviations)
)                        end of look-ahead
[A-Z]{2}                 any character of: 'A' to 'Z' (2 times)
[, ]+                    any character of: ',', ' ' (1 or more times (matching the most amount possible))
\d{5}                    digits (0-9) (5 times)
(?:                      group, but do not capture (optional (matching the most amount possible)):
  -                        '-'
  \d{4}                    digits (0-9) (4 times)
)?                       end of grouping
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...