(function(){ ;(function(){ var logUrl = 'http://nsclick.baidu.com/v.gif?pid=201'; var params = { tid : '7000', pj : 'app', fm : 'apptm', item : 'apploaded', zone: 'web-list', wd : '冠心病', qid : window.bdQid, cid : window.bdCid, _t : new Date().getTime() }; var img = window.app_temp_img = new Image(); img.onload = img.onerror = img.onabort = function(){ img.onload = img.onerror = img.onabort = null; img = null; window.app_temp_img = null; }; for(var p in params){ logUrl = logUrl + '&' + p + '=' + encodeURIComponent(params[p]); } img.src = logUrl; })(); app.data = app.data || {}; var baidu = app.baidu; var data = { appLables : 0, appSType : "500" ,otherInfo : {"LABEL":[{"sa":"日常", "su":2}], "STYPE":[{"sa":"500", "su":2}]} }; baidu.extend(app.data,data); var args = { keyword : '冠心病', initKeyword : '冠心病', dispNum : 2, totalNum : 2, firstAppId : '187184' }; baidu.extend(app.args, args); var divisor = app.args.totalNum > app.args.separation_b ? 20 : 8; if(app.data.appSType == '200') { if(app.args.totalNum <= app.args.separation_b){ divisor = 2; } else if(app.args.totalNum >= 80){ if(!app.data.appLables){ app.data.appLables = {}; app.data.appLables.labels = app.data.otherInfo['LABEL']; } var st = app.data.otherInfo['STYPE']; if(app.data.otherInfo['STYPE']){ var t; for(var i = 0, l = st.length; i < l; i++){ t = st[i]; if(t.sa == '200'){ app.args.totalNum = t.su > 760 ? 760 : t.su; break; } } } divisor = 8; } } else if(app.data.appSType == '400' && app.args.totalNum <= app.args.separation_b){ divisor = 3; } else if(app.data.appLables !=0 && app.data.appLables.labels && app.data.appLables.labels.length >= 1 && app.data.appSType != '200'){ divisor = 12; } var pageNum = app.data.pageNum = Math.ceil(app.args.totalNum / divisor); app.data.initData = { "other_data" : [{"Query":"冠心病","app_sType":"500", "Keyword":"冠心病", "TotalPageNum":pageNum, "PageNo":1, "ListNum":2, "DispNum":2,"NowTime":window["bdServerTime"]}], "data": [   { "app_id":'187184', "app_cid":'6', "app_leaf_cid":'25', "rankExpand" : 1, "hotLevel" : 39.815, "app_name":'冠心病专家', "app_name_hilight":'<em>冠心病</em>专家', "developer_name":'开发者:120健康网',  "developer_alias":'120健康网',  "developer_website":'http://www.120.net', "developer_level" : '2', "app_shortdesc":'帮您找到全国正规医院的冠心病专家,根据疾病找专家',  "app_sType":'501',   "attribute": eval('({\"app_cover_cat\":\"e340cccce58611f74985dc080ad830cb.jpg\",\"app_cover_cat2\":\"cf510b4ebcb90b7ab13ea5e7af4f636a.jpg\",\"type\":\"\\u65e5\\u5e38\"})'),  "score":'3.0', "score_num":2, "app_price":'0', "app_logo":'http://apps3.bdimg.com/store/static/kvt/e0ba573897f3563162b0144d4ccdebe0.jpg' ,"app_useTimes":'335' ,"app_lable":'日常'  ,"create_time":1322475707 },   { "app_id":'173856', "app_cid":'6', "app_leaf_cid":'25', "rankExpand" : 1, "hotLevel" : 37.865, "app_name":'冠心病专家', "app_name_hilight":'<em>冠心病</em>专家', "developer_name":'开发者:好大夫在线',  "developer_alias":'好大夫在线',  "developer_website":'http://www.haodf.com', "developer_level" : '1', "app_shortdesc":'帮你找到可信赖的正规医院冠心病专家',  "app_sType":'501',   "attribute": eval('({\"type\":\"\\u65e5\\u5e38\"})'),  "score":'5.0', "score_num":3, "app_price":'0', "app_logo":'http://apps2.bdimg.com/store/static/kvt/3b22539028accf3d0f188b1a62cd5391.jpg' ,"app_useTimes":'998' ,"app_lable":'日常'  ,"create_time":1319797466 },  {} ].slice(0, -1) }; app.data.searchData = app.data.initData.data; app.data.initData.data = app.data.searchData.slice(0, divisor); })(); app.init(); 我想取出 软件名称、开发者、站点、和描述 他们在文中分别对应的标识如下"app_name":'冠心病专家'
"developer_name":'开发者:120健康网'
"developer_website":'http://www.120.net'
"app_shortdesc":'帮您找到全国正规医院的冠心病专家,根据疾病找专家'我采用的方法是正则 如下
Regex reg = new Regex(@"app_name"":'([^']+)[\s\S]*?developer_name"":'([^']+)[\s\S]*?developer_website"":'([^']+)[\s\S]*?app_shortdesc"":'([^']+)");
                                if (reg.IsMatch(test))
                                {
                                    //软件名称
                                    richTextBox3.AppendText("软件名称:" + reg.Match(test).Groups[1].Value.Trim() + "\r\n");
                                    //开发者
                                    richTextBox3.AppendText(reg.Match(test).Groups[2].Value.Trim() + "\r\n");
                                    string b = reg.Match(test).Groups[2].Value;
                                    //站点
                                    richTextBox3.AppendText("开发站点:" + reg.Match(test).Groups[3].Value.Trim() + "\r\n");
                                    //描述
                                    richTextBox3.AppendText("描述:" + reg.Match(test).Groups[4].Value.Trim() + "\r\n");
                                }
但是上述正则只能取出一个,但是仔细看上面的HTML代码,实际上一共是两个,并且两个的标示符一模一样(都是"app_name"、"developer_name"等)->第一个:
"app_name":'冠心病专家'
"developer_name":'开发者:120健康网'
"developer_website":'http://www.120.net'
"app_shortdesc":'帮您找到全国正规医院的冠心病专家,根据疾病找专家'第二个
"app_name":'冠心病专家'
"developer_name":'开发者:好大夫在线'
"developer_website":'http://www.haodf.com'
"app_shortdesc":'帮你找到可信赖的正规医院冠心病专家'这种情况应该怎么将两个或多个都取出来呢?
注意: 也可能是三个 四个 五个...最好不要写死两个 但是可以肯定 肯定不会超过8个
感谢回复!!!PS:实际界面请参考 百度搜索“冠心病”  您会看到中间的两个很像winform的两个小软件...就是那个的html代码

解决方案 »

  1.   

    Regex reg = new Regex(@"app_name"":'([^']+)[\s\S]*?developer_name"":'([^']+)[\s\S]*?developer_website"":'([^']+)[\s\S]*?app_shortdesc"":'([^']+)");
      foreach(Match m in reg.Matches(test))
      {
      //软件名称
      richTextBox3.AppendText("软件名称:" + m.Groups[1].Value.Trim() + "\r\n");
      //开发者
      richTextBox3.AppendText(m.Groups[2].Value.Trim() + "\r\n");
      string b = m.Groups[2].Value;
      //站点
      richTextBox3.AppendText("开发站点:" + m.Groups[3].Value.Trim() + "\r\n");
      //描述
      richTextBox3.AppendText("描述:" + m.Groups[4].Value.Trim() + "\r\n");
      }