Вы также можете сделать что-то вроде этого:
vector <- c("a", "", "b", "c","","d", "e")
vector[seq(which(vector=="b")+1,which(vector=="e")-1)]
#[1] "c" "" "d"
Я знаю, что веб-сервис Google Maps отлично делает это. Так что, если вы хотите использовать это, вы можете сэкономить много усилий.
Реальная проблема здесь в том, что вам нужна всемирная база данных названий городов / стран / провинций для эффективного анализа НЕСТРУКТУРИРОВАННЫХ адресов.
Вот как Я создаю URL-адрес для использования API Карт Google на C #:
string url = "http://maps.google.com/maps/geo?key=" + HttpUtility.UrlEncode(this.apiKey) + "&sensor=false&output=xml&oe=utf8&q=" + HttpUtility.UrlEncode(location);
Возможно, вы захотите прочитать этот вопрос о переполнении стека: « Синтаксический анализ используемого адреса улицы, города, штата, почтового индекса из строки ». Нет никакого реального Java-кода для выполнения этой работы (только немного VB), но есть некоторое обсуждение проблемы и дополнительная информация об альтернативе, упоминаемом Джоном Гитценом, об использовании веб-службы для ее интерпретации.
См. www.address-parser.com , они предлагают веб-службу для анализа международных адресов.
В проекте Mural есть парсер адресов: https://mural.dev.java.net/ . Я не понял, как извлечь его из более крупного движка Mural, но он действительно работает на основе очень ограниченных тестов.