您的位置:首页 > 其它

.net 正则表达式的应用

2014-08-07 15:04 330 查看


string srcString = " <td align=\ " center\ " ><ul><li>查询结果1:北京市 网通</li><li>查询结果2:北京市 网通</li><li>查询结果3:北京市 网通</li></ul></td> " ;
// 匹配 "<li>查询结果1:" 与 "</li>" 之间的所有字符的正则表达式
string regexStr = " <li>查询结果1:(?<key>.*?)</li> " ;
Regex r = new Regex(regexStr, RegexOptions.None);
Match mc = r.Match(srcString);
string dataStr = mc.Groups[ " key " ].Value;

//dataStr 就是我们要得的数据:“北京市 网通”。

说明:
这里最关键的是设置正则表达式: " <li>查询结果1:(?<key>.*?)</li> "。

字符

描述

<key>

根据key获取由正则表达式匹配的值。

.(一点)

匹配除 "\n" 之外的任何单个字符。

*

匹配前面的子表达式零次或多次。

?

跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m})后面时,匹配模式是非贪婪的;非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

1.实战
抓取http://112.5.192.218/(S(5zq44xt4neqr0ct5najcbs5t))/ui/rtm/tourIntroduce.aspx?tourid=2&tourname=%E7%A6%8F%E6%B8%85%E7%9F%B3%E7%AB%B9%E5%B1%B1&typeid=1"
这具网页的PM2.5等

protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
var textHtml = ExecuteRequest("http://112.5.192.218/(S(5zq44xt4neqr0ct5najcbs5t))/ui/rtm/tourIntroduce.aspx?tourid=2&tourname=%E7%A6%8F%E6%B8%85%E7%9F%B3%E7%AB%B9%E5%B1%B1&typeid=1");

// Response.Write(textHtml);
Dictionary<string, Regex> regs = new Dictionary<string, Regex>();
regs.Add("airQuality", new Regex("<li class=\"liwidth1\">空气质量<li class=\"liwidth2\">:</li></li><li class=\"liwidth\">(?<airQuality>.*?)</li>", RegexOptions.None));
regs.Add("pm25", new Regex("<li class=\"liwidth1\">P M 2.5<li class=\"liwidth2\">:</li></li><li class=\"liwidth\">(?<pm25>.*?)</li>", RegexOptions.None));
regs.Add("noi", new Regex("<li class=\"liwidth1\">负氧离子<li class=\"liwidth2\">:</li></li><li class=\"liwidth\">(?<noi>.*?)</li>", RegexOptions.None));
regs.Add("time", new Regex("<li class=\"liwidth1\">上传时间<li class=\"liwidth2\">:</li></li><li class=\"liwidth\">(?<time>.*?)</li>", RegexOptions.None));

Match airMc = regs["airQuality"].Match(textHtml);
string airQuality = airMc.Groups["airQuality"].Value;

Match pmMC = regs["pm25"].Match(textHtml);
string pm25 = pmMC.Groups["pm25"].Value;

Match noiMc = regs["noi"].Match(textHtml);
string noi = noiMc.Groups["noi"].Value;

Match timeMc = regs["time"].Match(textHtml);
string time = timeMc.Groups["time"].Value;

Response.Write("空气质量:" + airQuality + "P M2.5: " + pm25 + "负氧离子:" + noi + "上传时间:" + time);
}

}

public string ExecuteRequest(string request)
{
try
{
string textResponse = "";
HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(request);
objWebRequest.Method = "GET";
objWebRequest.ContentType = "application/x-www-form-urlencoded";

HttpWebResponse response = (HttpWebResponse)objWebRequest.GetResponse();
using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.Default))
{
textResponse = sr.ReadToEnd();
}
return textResponse;
}
catch (Exception ex)
{
Response.Write(ex.Message);
return "";
}
}

2.抓取网页带http网页的网址:



//读取html
var textHtml = File.ReadAllText(Server.MapPath("fy.txt"));
//如果有多个正则
Dictionary<string, Regex> regs = new Dictionary<string, Regex>();
regs.Add("fy", new Regex("<a class=\"open\" href=\"http://(?<url>.*?)\" target=\"_blank\">(?<name>.*?)</a>", RegexOptions.None));

MatchCollection fyCollection = regs["fy"].Matches(textHtml);

foreach (Match m in fyCollection)
{
string url = m.Groups["url"].Value;
string name = m.Groups["name"].Value;
Response.Write(name + "" + "http://" + url + "<br/>");
}

//for (int i = 0; i < fyCollection.Count; i++)
//{

// Response.Write(fyCollection[i].Groups["name"].Value+" http://"+ fyCollection[i].Groups["url"].Value+"<br/>");

//}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: