具有特定属性的正则表达式c #html标签

时间:2016-07-15 14:39:48

标签: c# html regex

我是正则表达式的新手:(经过大量搜索我的要求后,我能够管理得到答案,但我确实得到了额外的结果,如下所述:

我的字符串

<td valign="top" width="100%">
<td width="100%" valign="top">
<td valign="top" height="100%" width="100%">
<td valign="top">

我的表达

/<td (?=.*valign="top")(?=.*width="100%").*>/gm

我的结果

<td valign="top" width="100%">
<td width="100%" valign="top">
<td valign="top" height="100%" width="100%">

预期结果

<td valign="top" width="100%">
<td width="100%" valign="top">

结论:我想提取仅具有特定值的valign和width属性的TD标记。

注意:我必须解析大量数据文件,因此HTMLAgility会降低整个过程的速度。

请指导我最后的表达。干杯

1 个答案:

答案 0 :(得分:0)

这似乎是为我做的:

\<td\s+((valign="top"\s+width="100%")|(width="100%"\s+valign="top"))\s*>\gm

您的表达式会搜索这两个属性是否位于<td开头之前的某个位置。这个允许空格,然后搜索valign="top" width="100%"width="100%" valign="top",然后在td标记结束之前搜索更多可选的空格。这不允许除宽度和valign属性之外的所有属性。

说到这一点,使用正则表达式时总会出现意想不到的情况。你可以在这里实时测试你的正则表达式:http://regexr.com/只需输入你的字符串和正则表达式来查看它的选择。

编辑:

如果您想在属性周围考虑单引号和双引号,请尝试以下方法:

\<td\s+((valign=([",'])top\3\s+width=([",'])100%\4)|(width=([",'])100%\6\s+valign=([",'])top\7))\s*>\gm

现在我允许在属性值的开头添加“或”,并搜索在属性值的末尾找到的匹配项。

再次,我鼓励您访问我上面链接的网站,并自己玩这些。我几乎从不使用正则表达式,但是当我这样做时,我通常可以找到一个适用于该网站的表达式。