查找具有特殊文本的HTML表行

时间:2012-12-28 15:56:05

标签: c# regex

我想找到使用正则表达式的特殊文本的HTML表格行。

在上表第一个单元格文本'Total'中,我想替换第一行。

<table>
    <tr><td>Total</td><td>255</td></tr>
    <tr><td>XYz</td><td>441</td></tr>
</table>

3 个答案:

答案 0 :(得分:1)

要回答您的问题,这将匹配并允许您替换该行。

(<tr><td>Total.*?</tr>)

但是,如果可能的话,我还鼓励你使用像HTMLAgilityPack这样的东西(将优雅地处理格式错误的HTML)或纯粹的XML解析器,如果你有幸拥有严格的XHTML标记(罕见)。

答案 1 :(得分:0)

不幸的是,您无法将HTML与正则表达式可靠地匹配。这是因为HTML使用正则表达式是context-free language而不是regular language parseable。

请考虑使用HTML解析器。对于C#,HTML Agility Pack是一个不错的选择,正如上面评论中提到的mgnoonan。

答案 2 :(得分:0)

必须做出一些假设,您的HTML输入字符串是有效的HTML(格式正确),否则函数将 失败 :P

试试这个

    private static MatchCollection GetSpecialTables(string inputStr, string ftrName)
    {
        try
        {
            return Regex.Matches(inputStr, string.Format(@"<table>\s+<tr><td>{0}</td>.+?</table>", Regex.Escape(ftrName)), RegexOptions.Singleline);
        }
        catch (ArgumentException ex)
        {
            // Syntax error in the regular expression, handle it
            return null;
        }
    }
    // use it this way!
    static void Main()
    {

        var matches = GetSpecialTables(myHtml, "Total");
        foreach (Match match in matches)
        {
            // match.Value;
        }

    }