想将如下html代码中的数据放到DataTable中,
<TR>
<TD vAlign=center align=middle bgColor=#ffffcc>张三</TD>
<TD vAlign=center align=middle bgColor=#ffffcc>12:24 </TD>
<TD vAlign=center align=middle bgColor=#ffffcc>150</TD></TR>
<TR>
<TD vAlign=center align=middle bgColor=#ffffcc>李四</TD>
<TD vAlign=center align=middle bgColor=#ffffcc>15:28</TD>
<TD vAlign=center align=middle bgColor=#ffffcc>250</TD></TR>
希望DataTable中的两行如下:
张三 | 12:24 | 150
李四 | 15:28 | 250
敬请给出例子,谢谢!
<TR>
<TD vAlign=center align=middle bgColor=#ffffcc>张三</TD>
<TD vAlign=center align=middle bgColor=#ffffcc>12:24 </TD>
<TD vAlign=center align=middle bgColor=#ffffcc>150</TD></TR>
<TR>
<TD vAlign=center align=middle bgColor=#ffffcc>李四</TD>
<TD vAlign=center align=middle bgColor=#ffffcc>15:28</TD>
<TD vAlign=center align=middle bgColor=#ffffcc>250</TD></TR>
希望DataTable中的两行如下:
张三 | 12:24 | 150
李四 | 15:28 | 250
敬请给出例子,谢谢!
解决方案 »
- 找不到类型或命名空间名称“SqlConnection”
- 哪位高手有asp.net项目集成支付宝的例子,麻烦给小弟一下啊!急用,谢谢啊!!!!
- 百度收录了ajax控件的脚本
- 【菜鸟送分】在这个类里怎样增加一个条件语句?
- 关于图片热区的问题~~~asp.net
- gridview分页问题和皮肤问题-急
- 急..........Redirect转向iframe跳转问题
- C# 如何创建String数组的方法
- 一个关于EXCEL“获取外部数据”的问题,请高手们帮忙看看!
- 求助,为何后台没有收到值呢?
- 请问能不能在gridview 编辑或添加的时候加入对输入的验证或下拉菜单之类的其它控件啊?
- ===老生常谈,还是字串分隔存入数据库问题
public static string ReplaceSpace(string content)
{
string tag = @"(?:[\w-:]+)";
string attribute = @"(?:[\w-:]+)(?:=(?:[^\s\>\<]*|\""[\s\S]*?\""|\'[\s\S]*?\'))?";
string name = @"(?:[\w-:]+)";
string argument = @"(?:[\w-:]+|\""[\s\S]*?\""|\'[\s\S]*?\')";
string beginningTag = @"(?:\<" + tag + @"(?:\s+" +attribute + @")*\s*(?:/)?\>)";
string endingTag = @"(?:\</" + tag + @"\>)";
string xmlComment = @"(?:\<!--[\s\S]*?--\>)";
string xmlDirective = @"(?:\<!" +name + @"(?:\s+" +argument + @")*\s*\>)";
string xmlCData = @"(?:\<!\[CDATA\[(?:[\s\S]*?)\]\]\>)";
string styleBlock = @"(?:(?:\<(?:Style)(?:\s+" +attribute + @")*\s*(?:/)?\>)(?:[\s\S]*?)(?:\</(?:Style)\>))";
string scriptBlock = @"(?:(?:\<(?:script)(?:\s+" +attribute + @")*\s*(?:/)?\>)(?:[\s\S]*?)(?:\</(?:script)\>))";
string xmlLiteral = @"(?:(?:(?<blank>[ ]+)|[^ \<\>])+)";
string pattern = styleBlock + "|" + scriptBlock + "|" + xmlDirective + "|" + xmlComment + "|" + beginningTag + "|" + endingTag + "|" + xmlCData + "|" + xmlLiteral;
Regex r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
MatchCollection mc = r.Matches(content);
StringBuilder sb = new StringBuilder(content.Length + 1024);
foreach (Match m in mc)
{
if (m.Groups["blank"].Captures.Count > 0)
{
sb.Append(m.Value.Replace(" ", " "));
}
else
{
sb.Append(m.Value);
}
}
return sb.ToString();
}
最后,再给个更长的(全长765)正则表达式,这个算是我写的最长的正则表达式了。其实上面给出的第一个Regex是下面这个的一个专用于捕获blank的简化版本。
虽然长,但很有用,可以解析出整个XHTML/HTML页面的所有元素和结构来:)解析后的内容都分别保存在named groups中了,可以通过match.Groups["name"];来提取,比如match.Groups["tag"];match.Groups["attribute"];match.Groups["Style_Block";match.Groups["XML_Comment"];等,感兴趣的不妨试一试就知道了:) (?#Copyright 2005, by Laser Lu.)(?<Style_Block>(?<begin>\<(?<tag>style)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?<body>[\s\S]*?)(?<end>\</\k<tag>\>))|(?<Script_Block>(?<begin>\<(?<tag>script)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?<body>[\s\S]*?)(?<end>\</\k<tag>\>))|(?<XML_Directive>\<!(?<name>[\w-:]+)(?:\s+(?<argument>[\w-:]+|\"[\s\S]*?\"|\'[\s\S]*?\'))*\s*\>)|(?<XML_Comment>\<!--[\s\S]*?--\>)|(?<Beginning_Tag>\<(?<tag>[\w-:]+)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)|(?<Ending_Tag>\</(?<tag>[\w-:]+)\>)|(?<XML_CDATA>\<!\[CDATA\[(?<data>[\s\S]*?)\]\]\>)|(?<XML_Literal>(?:(?<blank>[ ]+)|[^ \<\>])+) 关于以上的两个Regex的相关说明,应该说功能还是比较强大的了:
1。这两个正则表达式能够解析最好是HTML/XHTML格式,如果是其他格式的字符串,有可能会运行不正常;
2。支持识别的标记有:普通的HTML标记,<!--HTML注释-->,<!XML指令>,<![CDATA[ ... ]]>,标记或指令的标识符支持[a-zA-Z0-9_-:];
3。支持name=value和单独一个name的attribute,能够识别出""或''包括的属性值;
4。针对<style></style>和<script></script>标记包含的内容进行特殊处理,也就是所有的CSS和Script代码将原封不动的作为整体捕获。