2015-08-30 3 views
0

Поиск в коде результата Google Maps. Мои регулярные выражения, чтобы получить адрес:Regex, чтобы найти все адреса

Regex re_addressen = new Regex("\"\\w*\\s[0-9]+,\\s[0-9][0-9][0-9][0-9]\\s\\w\\w\\s\\w,*"); 

(Поиск по всем addressess в каждой карты Google результат)

Но тогда я только получаю АДРЕСА, которые одно слово. Некоторые адреса имеют 2 слова. Я хочу, чтобы те, которые были замечены в моем списке.

Моя регулярное выражение идея здесь:

Regex re_addressen = 
    new Regex("\"\\w*\\s\\w*[0-9]+,\\s[0-9][0-9][0-9][0-9]\\s\\w\\w\\s\\w,*"); 

Но до сих пор, только адреса, которые долгое время одно слово. Кто-нибудь?

+1

Я надеюсь, что результат, который вы пытаетесь проанализировать с регулярным выражением, не является json. – Eser

+0

Я никогда не получал то, что Джонсон. Но если это означает, что я получаю (обнаруживаю) определенную информацию из сценария (j) и фильтрую ее в (строку). Тогда да. – Onno

ответ

1

Похоже, вы пытаетесь разобрать html с регулярным выражением. Don't do it.

Вместо этого найдите API из google, который возвращает xml или json и использует его. См., Например, this url.

Теперь все, что вам нужно сделать, это загрузить этот URL-адрес и разобрать результат json с помощью соответствующего json-парсера. Я буду использовать Json.Net для этого

using (var client = new HttpClient()) 
{ 
    var query = "big bang"; 
    var urlx = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address=" + WebUtility.UrlEncode(query); 

    //An optional language. default is en-US 
    //client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-US")); 
    //client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("ru-RU")); 
    //client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("ar-EG")); 

    var json = await client.GetStringAsync(urlx); 
    dynamic obj = JsonConvert.DeserializeObject(json); 

    foreach (var res in obj.results) 
    { 
     string address = res.formatted_address; 
     decimal lat = res.geometry.location.lat; 
     decimal lng = res.geometry.location.lng; 

     Console.WriteLine(string.Format("{0},{1}=>{2}", lat, lng, address)); 
    } 
} 
Смежные вопросы