我想使用正则表达式查找具有特殊文本的 HTML 表格行。
在上表的第一个单元格文本“总计”中,我想替换第一行。
<table>
<tr><td>Total</td><td>255</td></tr>
<tr><td>XYz</td><td>441</td></tr>
</table>
要回答您的问题,这将匹配并允许您替换该行。
(<tr><td>Total.*?</tr>)
但是,如果可能的话,我还鼓励您使用其他东西,例如HTMLAgilityPack(将优雅地处理格式错误的 HTML)或纯 XML 解析器,如果您有幸拥有严格的 XHTML 标记(很少见)。
不幸的是,您不能仅使用正则表达式可靠地匹配 HTML。这是因为 HTML 是一种上下文无关语言,而不是可使用正则表达式解析 的常规语言。
考虑改用 HTML 解析器。对于 C#,HTML Agility Pack是一个不错的选择,正如上面评论中提到的 mgnoonan。
必须做出一些假设,您的 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;
}
}