正则表达式找到所有地址

时间:2015-08-30 11:07:24

标签: c# regex regular-language

搜索Google地图结果的代码。 我的正则表达式得到一个地址:

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

(搜索每个谷歌地图结果中的所有地址)

但是我只得到一个字的地址。 有些地址有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 个答案:

答案 0 :(得分:2)

好像你正试图用正则表达式解析html。 Don't do it

而是从谷歌找到一个API,它返回一个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));
    }
}