理论教育 正则表达式在算法中的作用

正则表达式在算法中的作用

时间:2023-11-04 理论教育 版权反馈
【摘要】:因为算法要求操作html标记,而要匹配的字符串较繁杂,因此需要借助正则表达式来完成。Singleline选项允许“.”字符匹配新行,因为一个标记的HTML可能在多行出现。首先,它匹配一个表格标记的“<”字符;然后,匹配一个名为outertag的组。在此,使用这个组获取最初的结果,然后匹配结束标记类型。

正则表达式在算法中的作用

因为算法要求操作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#语言定义:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈