正则表达式复习 (?<=) (?=)

1.首先值得一说的是"<" 和">" 不是元字符 "."是元字符

private string getHtml()
{
try
{
date = DateTime.Now.Date.ToString("yyyy-MM-dd") + " 09:30:00";
WebClient wc = new WebClient();

//string reg = "<td(\\s+)?width=\"15%\"(\\s+)?align=\"center\"><a(\\s+)?href=\"#\".+<font(\\s+)?color=blue>(?<type>.+)(\\s+)?</font>.+(\\s+)?<td(\\s+)?width=\"35%\"(\\s+)?align=\"center\">(?<values>.+)(\\s+)?</td>(\\s+)?<td(\\s+)?width=\"10%\"(\\s+)?align=\"right\"><img(\\s+)?src=\"/shibor/web/html/images/newimages/(?<image>.+)\"(\\s+)?width=\"11\"(\\s+)?height=\"11\"(\\s+)?/>.+(\\s+)<td(\\s+)?width=\"25%\"(\\s+)?align=\"left\">(?<BP>.+)(\\s+)?</td>";
using (Stream stream = wc.OpenRead("http://www.shibor.org/shibor/ShiborTendaysShow.do"))
{
using (StreamReader sr = new StreamReader(stream, Encoding.Default))
{

string content = sr.ReadToEnd();
//单行模式匹配
//让.可以匹配到\n
string clas;
//string patern = @"(?<=<table id=""result"" cellpadding=""0"" class=""shiborquxian2"">)([\s\S]*?)(?=</table>)";
string patern = @"(?<=<table (.*)?class=""shiborquxian2""[^>]*?>)([\s\S]*?)(?=</table>)";
MatchCollection matches = Regex.Matches(content, patern);
string trs = string.Empty;
foreach (Match match in matches)
{
trs = match.Groups[0].Value;
break;
}
string trPatern = @"(?<=<tr(.*)?[^>]*?>)([\s\S]*?)(?=</tr>)";
MatchCollection trMatchCollection = Regex.Matches(trs, trPatern);
List<string> trList = new List<string>();
List<string> CurrentTrList = new List<string>();
for (int j = 0; j < trMatchCollection.Count; j++)
{
Match match = trMatchCollection[j];
string tr = string.Empty;
tr = match.Groups[0].Value;
CurrentTrList.Add(tr);
if (j == 1)
{
trList.Add(tr);
break;
}

}

//
string tdPatern = @"(?<=(<td[^>]*?>))(?<tdCell>[\s\S]*?)(?=</td>)";
MatchCollection tdMatchCollection = Regex.Matches(trList[0], tdPatern);
MatchCollection CurrenttdMatchCollection = Regex.Matches(CurrentTrList[0], tdPatern);
string td = string.Empty;
List<string> tdlList = new List<string>();
List<string> CurrenttdlList = new List<string>();
foreach (Match match in CurrenttdMatchCollection)
{

td = match.Groups["tdCell"].Value;
CurrenttdlList.Add(td);

}

foreach (Match match in tdMatchCollection)
{

td = match.Groups["tdCell"].Value;

tdlList.Add(td);

}
infoTitleW = CurrenttdlList[0];
List<string> termList = new List<string>()
{
"O/N","1W","2W","1M","2M","3M","6M","9M","1Y"

};
MKT += @"
<ul id=‘xianc‘ class=‘pricing_table‘>
<li class=‘price_block‘>
<h5 style=‘color: #ffffff;‘>期限</h5>
<ul class=‘features‘>
<li>O/N</li>
<li>1W</li>
<li>2W</li>
<li>1M</li>
<li>3M</li>
<li>6M</li>
<li>9M</li>
<li>1Y</li>

</ul>
</li>
";

MKT += @" <li class=‘price_block‘>
<h5 style=‘color:#ffffff‘>Shibor(%)</h5>
<ul class=‘features‘>";
for (int i = 1; i < tdlList.Count; i++)
{
decimal prior = decimal.Parse(tdlList[i].ToString());
decimal curr = decimal.Parse(CurrenttdlList[i].ToString());
decimal change = (curr - prior) * 100;
MKT += string.Format("<li>{0}</li>", curr);

}
MKT += "</ul></li>";
MKT += @" <li class=‘price_block‘>
<h5 style=‘color:#ffffff‘>变化值(BP)</h5>
<ul class=‘features‘>";
for (int i = 1; i < tdlList.Count; i++)
{
decimal prior = decimal.Parse(tdlList[i].ToString());
decimal curr = decimal.Parse(CurrenttdlList[i].ToString());
decimal change = (curr - prior) * 100;
MKT += string.Format("<li>{0}</li>", change);

}
MKT += "</ul></li>";

MKT += @" <li class=‘price_block‘>
<h5 style=‘color:#ffffff‘>涨跌(BP)</h5>
<ul class=‘features‘>";
for (int i = 1; i < tdlList.Count; i++)
{
decimal prior = decimal.Parse(tdlList[i].ToString());
decimal curr = decimal.Parse(CurrenttdlList[i].ToString());
decimal change = (curr - prior) * 100;
MKT += string.Format("<li>&nbsp{0}&nbsp</li>", change >= 0 ? "<img height=7 src=‘/images/upicon.gif‘>" : "<img height=7 src=‘/images/downicon.gif‘>");

}
MKT += "</ul></li></ul>";

}
}
}
catch (Exception ex)
{
MKT = "部分内容加载失败因为:" + ex.Message + "<br/><br/>请点击&nbsp;&nbsp;&nbsp;<a href=‘#‘ id=‘relaod‘ style=‘color:blue;‘>重新加载</a>";
//Response.Write("部分内容加载失败因为:" + ex.Message + "\n请尝试重新刷新页面");
//Response.End();
// throw new Exception("部分内容加载失败因为:"+ex.Message+"\n请尝试重新刷新页面");
}
return MKT;
}
protec

时间: 2024-10-05 13:44:39

正则表达式复习 (?<=) (?=)的相关文章

马哥学习笔记

第一章.操作系统基础 01_03_操作系统基础 计算机体系结构包括以下几部分: 运算器 控制器 存储器,内存,编址 输出设备 输入设备 北桥 - 高速总线控制器 南桥 - 低速总线总线控制器 硬件架构: ARM x86 x64 安腾 alpha UltraSparc Power M68000, M68K PowerPC OS: Windows Linux Unix HP-UX Solaris AIX SCO UNIX Unixware OS/2 内核功能: 进程管理 内存管理 文件系统 网络功能

JQUERY和AJAX学习

1.ADO.net中加一段神奇的代码: string dataDir = AppDomain.CurrentDomain.BaseDirectory; if (dataDir.EndsWith(@"\bin\Debug\")||dataDir.EndsWith(@"\bin\Release\")) { dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName; AppDomain.

django路由层(一)

Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时候,要对应执行哪个函数. URLconf配置 基本格式: 示例: urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^test', views.test), url(r'^testadd

[复习]正则表达式

正则表达式是上个学期老师花一节课讲的内容,比较有用且难以记住,因此复习一下正则表达式的内容. 为什么要学习正则表达式?它是用于进行文本匹配的工具,能够方便地抓取到你所需要的内容,解析一段内容所包含的信息. 1.入门 1.1首先列举一些正则表达式的例子:\d+(匹配一个或更多的数字,+代表一个或多个.) hi(直接匹配hi这个字符串,不管它是单独的还是在其他单词中包含) \bhi\b(\b意为单词的开头或结尾,不匹配单词之间的空格,仅仅是一个位置) .*(.代表匹配任意的字符,*代表0个或多个,.

复习正则表达式时的一个小知识点

复习正则表达式时的一个小知识点     当分组后,若要引用此小组内容可以有两种方式 1:用 ${1} 2:用 \1 两者效果是一样的

ES6小实验-复习正则表达式

正则表达式总是记不住,这一次参考网上一篇的文章好好复习一遍 正则表达式构造函数(四种写法): var regex = new RegExp('xyz', 'i') var regex = new RegExp(/xyz/i) var regex = /xyz/i // ES6的写法.ES5在第一个参数是正则时,不允许此时使用第二个参数,会报错. // 返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符. // 下面代码返回”i”. new RegExp(/abc/ig, 'i'

【JS复习笔记】05 正则表达式

好吧,正则表达式,我从来没记过.以前要用的时候都是网上Copy一下的. 这里还是扯一下吧,以后要是有要用到的正则表达式那么就收集到这个帖子里.(尽管我认为不会,因为我根本就不是一个专业的前端,我只是来划下水的\(^o^)/) 应用范围:正则表达式主要应用于对字符串中的信息实现查找,替换和提取操作. 可处理正则表达式的方法有6个: regexp.exec,regexp.test,string.match,string.replace,string.search和string.split 应用原因:

正则表达式五分钟快速复习

项目小版本上线偷得半日闲,刚刚又重新看了一遍正则,这次有空仔细看,完全理解了一遍,收获很大,下面整理一下 总体 正则其实非常简单,没有太多东西,就只有几个组成部分:表示字符/表示数量/表示位置/其他 不过确实正则可读性非常差,我觉得首要原因就是组成成分混乱,所以我的技巧是分两步,第一步是断句,第二步是理解,断句非常重要 表示字符 普通字符 任意字符(元字符需要转义)(空格也是直接匹配) 元字符(匹配一类字符) . -匹配除换行符以外的任意字符 \w -匹配字母或数字或下划线或汉字(word) \

通过一个翻译程序复习下 抓数据、正则表达式等

先来看一下程序界面以及效果 首先如Title,是百度的翻译.因为英文水平有限,所以每次都求翻译,有一次注意到百度的翻译不需要登录就可以翻译,于是就猜到只要发送正确的请求就一定能获得服务器返回的数据.所以照着百度翻译的界面开始搞起来. 一:监视请求,捕获有用的请求地址 我用的是谷歌浏览器,直接按 F12 就可以监视请求了. 二:分析地址和参数 通过监视请求,发现语言类型判断地址  http://fanyi.baidu.com/langdetect 判断语言类型的参数只有一个  query:待翻译内