1

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

在上表的第一个单元格文本“总计”中,我想替换第一行。

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

3 回答 3

1

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

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

但是,如果可能的话,我还鼓励您使用其他东西,例如HTMLAgilityPack(将优雅地处理格式错误的 HTML)或纯 XML 解析器,如果您有幸拥有严格的 XHTML 标记(很少见)。

于 2012-12-28T16:02:12.433 回答
0

不幸的是,您不能仅使用正则表达式可靠地匹配 HTML。这是因为 HTML 是一种上下文无关语言,而不是可使用正则表达式解析 的常规语言。

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

于 2012-12-28T15:59:37.097 回答
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;
        }

    }
于 2012-12-28T16:17:59.797 回答