【急】求C#正则表达式取html元素的某些数据,在线等

<HTML>
<HEAD>
<TITLE>McsReport.CAB</TITLE>
</HEAD>
<BODY>

<!--<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>-->

<OBJECT ID="McsRpt"

CLASSID="CLSID:6BF283CB-2FF1-4CA6-A48E-1397B61058B6"
CODEBASE="McsReport.CAB#version=2,0,0,1">
</OBJECT>
</BODY>
</HTML>
上述是一个模板,
用正则匹配<OBJECT ></OBJECT >,用数组或者list返回满足的数据
要求:(1)匹配的时候,部分大小写... (2)页面已经被注释的<OBJECT>标签不要匹配进来

如上述的html返回的数据arry[0]="
<OBJECT ID="McsRpt"

CLASSID="CLSID:6BF283CB-2FF1-4CA6-A48E-1397B61058B6"
CODEBASE="McsReport.CAB#version=2,0,0,1">
</OBJECT>
"
不分大小写 就是有时候 标签是<Object></object>之类的,有些人写不规范的就是这样子了

第1个回答  2014-11-20
/*
*下面这段代码能够满足你的需求:
*关键位置有注释
*/

List<string> result = new List<string>();
//匹配表达式使用懒惰模式,就能区分出多个匹配项([\\s\\S]+?)
string parttern = "(?<!\\<\\!--)\\<object[\\s\\S]+?\\</object\\>(?!--\\>)";
//匹配不区分大小写,使用匹配参数RegexOptions.IgnoreCase
Regex reg = new Regex(parttern, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(text);
foreach (Match m in mc)
{
result.Add(m.Value);
}
第2个回答  2014-11-20
(?<!<!--)<object((?!</object).)*</object>(?!-->)

追问

为什么会有两项出来呢,还有怎么不区分大小写

追答(?i)(?<!<!--)<object(?:(?!</object).)*</object>(?!-->)

追问

好吧,我其实不懂正则语法,这个正则貌似只能返回第一个匹配的,我在这个文件复制了几个object 发现 后面几个匹配不出来的,求赐教

追答

因为你只去了一个匹配
match in reg.matches
group in match.groups

本回答被提问者采纳
相似回答