【发布时间】:2013-03-01 15:38:24
【问题描述】:
我正在使用正则表达式替换某些 html 代码中的值。它正确匹配 html 代码中的所有实例,但是当使用带有反向引用的 Regex.Replace() 时,它不会替换反向引用。
例如
html = "<td>[element]elementreference='oldvalue';[/element]</td>";
html = Regex.Replace(html, @"(['""#(=])" + elementReference.Key + @"(['""#)];|&)", "$1" + elementReference.Value + "$2", RegexOptions.IgnoreCase);
结果:
"<td>[element]elementreference=$1newvalue'[/element]</td>"
但如果我使用
html = "<td>[element]elementreference='oldvalue';[/element]</td>";
var regex = new Regex(@"(['""#(=])" + elementReference.Key + @"(['""#)];|&)", RegexOptions.IgnoreCase);
foreach (Match match in regex.Matches(html))
{
html = html.Replace(match.Value, match.Groups[1] + elementReference.Value + match.Groups[2]);
}
结果是
"<td>[element]elementreference='newvalue'[/element]</td>"
这是我的预期。
谁能解释为什么使用 Regex.Replace() 不起作用?
编辑
我不是要替换内部 html,而是要替换 [element]elementreference='oldvalue'[/element] 的 'oldvalue' 部分,它恰好位于 html 标记中。我的问题在于我试图通过使用反向引用来替换文本周围的撇号。这个撇号可以是多个值,这就是我使用反向引用的原因。
【问题讨论】:
-
不要使用正则表达式来解析 HTML - 获取 HTMLAgilityPack。 stackoverflow.com/a/1732454/847383
-
你能进一步解释你的问题吗?您提供的输出正是我希望您的正则表达式创建的。
-
我认为您应该使用可用的 .net xml 文档类来修改 xhtml - 或者 - 如果需要在客户端使用 jQuery。
-
另外,这不是您的确切代码。您发布的代码无法编译
标签: c#