正则表达式匹配标签

时间:2009-07-24 14:38:23

标签: c# regex

我有以下文字,我想从中提取所有<td ????>???</td>代码

<tr id=row509>
    <td id=serv509 align=center  class='style1'>Z Deviazione Tecnico Home verso S24 [ NON USATO ]</td>
    <td align=center class='style4'>23</td>
    <td align=center class='style10'>22</td>
    <td align=center class='style6'>0</td>
    <td align=center class='style2'>0</td>
    <td id=rowtot509 align=center class='style6'>0</td>
    <td align=center class='style6'>0</td>
    <td align=center class='style2'>0</td>
    <td align=center class='style6'>0</td>
</tr>

预期结果将是:

1. <td id=serv509 align=center  class='style1'>Z Deviazione Tecnico Home verso S24 [ NON USATO ]</td>
2. <td align=center class='style4'>23</td>
3. <td align=center class='style10'>22</td>
[..]

有任何帮助吗?感谢

3 个答案:

答案 0 :(得分:2)

使用HTML或XML库有什么问题?

例如,使用XML和XPath,这只是以xml / td为例,无论库API支持哪种方式。

正则表达式是一种糟糕的方式,因为XML不是常规语言。具体来说,您可以将标记嵌套在其他标记内,这是无法用正则表达式表示的内容。

因此,虽然为简单情况(<td.*?</td>)创建正则表达式很容易,但如果XML稍微改变,它很容易破坏。

假设XML已损坏,但您可以使用Regex 修复它。 :-)例如,如果用(\w+)=(\w+)(或$1='$2'替换其中的模式\1='\2',如果这是c#替换模式的语法,那么您将获得有效的XML。

答案 1 :(得分:0)

我同意丹尼尔,但是如果你真的必须使用正则表达式 - 请自己获取RegexBuddy的副本,这样你就可以快速调试你的表达。我花了很长时间才花了40美元。

答案 2 :(得分:0)

正则表达式是一种非常脆弱的工具,可用于此类问题,特别是如果表格的单元格内容可能是另一个表格存在任何风险。 (在这种情况下,您在</td>开始标记之后找到的第一个<td>标记实际上可能不会关闭该元素,而是关闭后代元素。)

解决类似问题的一种更强大的方法是将HTML解析为DOM,然后检查DOM。 HTML Agility Pack是人们似乎喜欢的。