想象一下,我有一个正则表达式,它应该捕获一个HTML链接并用另一个链接替换它。
正则表达式看起来像这样:
<a.+?href="(?'url'.+?)".*?>
它会匹配HTML标签:
<a href="http://www.google.com">
或者这个:
<a target="_blank" href="#top">
如果我现在打电话
regex.Replace(new MatchEvaluator(ReplaceUrl))
我会在命名组中获得参数匹配。
但Match.Groups集合不仅包含3个项目。
如何将整个比赛重新组合在一起,结果将是
<a href="http://www.EvulRulz.devil">
或者我是否真的需要将其他所有内容都放入命名组中?
感谢Jonesy(见下文我终于理解了Groups集合中索引的含义,
所有未命名的组都是从1开始编号。它们的出现顺序与正则表达式相同。
所以我的替换方法看起来像这样(基于我将实际适应的未经修改的正则表达式):
private static String ReplaceUrl(Match match)
{
return (match.Groups[1].Value + "http://www.EvulRulz.devil" + match.Groups[2].Value);
}
答案 0 :(得分:1)
使用捕获组来抓取标记的其他部分:
(<a.+?href=")([^"]+)("[^>]*>)
然后在替换中插入那些:
var pattern = @"(<a.+?href="")([^""]+)(""[^>]*>)";
var str = @"<a target=""_blank"" href=""#top"">";
var newUrl = "http://www.stackoverflow.com";
var newTag = Regex.Replace(str, pattern, "$1" + newUrl + "$3");
(我改变了你的基础正则表达式)