因为算法要求操作html标记,而要匹配的字符串较繁杂,因此需要借助正则表达式来完成。
1. 提取html标记中的所有表格标记及属性
C#语言定义:
说明
设置选项IgnoreCase,表示不关心html标记的大小写。另外,只有命名的组才能存储它们的匹配,由于只关注4个组的内容,为了便捷和高效,设置了ExplicitCapture选项。Singleline选项允许“.”字符匹配新行,因为一个标记的HTML可能在多行出现。
上面的正则表达式非常庞大,需要对它进行分解,首先分解出匹配第一个开始标记的正则表达式模式“<(?<outertag>[t,a,b,l,e,r,d]{2,})(?<attributes>[^>]*)>”。
这个表达式匹配像<tr>和<table width="149">这样的标记。首先,它匹配一个表格标记的“<”字符;然后,匹配一个名为outertag的组。这个组匹配形如table、tr和td的标记类型。在此,使用这个组获取最初的结果,然后匹配结束标记类型。接下来是attributes组,这个组可以匹配任意表格标记属性,如width="149"。若把它放在它自己的组中,就很容易在代码中访问匹配的结果。
一些单元素(如<img>标记)只有一个开始标记,所以前面匹配的模式就足够了。但表格的元素有一个结束标记,所以需要模式的其余部分,即“(?<innerhtml>(<(?<inn-ertag>[t,a,b,l,e,r,d]{2,})[^>]*>.*?</\\k<innertag>>)*(?=</\\k<outertag>>))?”。
外部组即innerhtml组,它匹配外部开始标记和最后的结束标记之间的所有内容。所以,如果有下面的HTML:(www.daowen.com)
那么,innerhtml组将匹配如下内容:
2. 提取表格标记中的行列属性值
(1)形如width="100",获取值100。
C#语言定义:
(2)形如height="50",获取值50。
C#语言定义:
(3)形如<td width="100";height="50">,获取值100和50。
C#语言定义:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。