C#正则表达式替换url

我在文档中有一堆链接,必须用javascript调用替换。 所有链接看起来都一样:

Document naam 1 Document naam 2 Document naam 3 

现在我希望将所有这些链接替换为:

 Document naam 1 Document naam 2 Document naam 3 

因此,url中的Id = 3D是函数中的第一个参数,doc参数是函数调用中的第二个参数。

我想使用Regex这样做,因为我认为这是最快捷的方式。 但问题是我的正则表达式知识太有限了

 Regex regex = new Regex(@"http://domain/ViewDocument.aspx\?id=3D(\d+)&doc=(\w+)"); Match match = regex.Match(link.Href); if (match.Success) { link.Href = string.Format("javascript:loadDocument('{0}','{1}')", match.Groups[1].Value, match.Groups[2].Value); } 

您可以使用Html Agility Pack来帮助解析HTML。 这是你如何做到的:

 //Regex regex = new Regex(@"^http://domain/ViewDocument\.aspx\?id=3D(\d+)&doc=(\w+)$"); Regex regex = new Regex(@"^http://domain/ViewDocument\.aspx\?id=3D(\d+)&doc=(\w+)$"); HtmlDocument doc = new HtmlDocument(); doc.Load("input.html"); var nodes = doc.DocumentNode .Descendants("a") .Where(node => regex.IsMatch(node.Attributes["href"].Value)); foreach (HtmlNode node in nodes) { var href = node.Attributes["href"]; href.Value = regex.Replace(href.Value, "javascript:loadDocument('$1','$2')"); node.Attributes["target"].Remove(); } doc.Save(Console.Out); 

结果:

 记录naam 1 
 记录naam 2 
 记录naam 3 

Polygenelubricants以正确的方式指出了我,但已经删除了他的答案 🙁

他给了我这个链接 。 感谢他,我找到了我的解决方案:

 string replaced = ""; string regex = ""; Regex regEx = new Regex(regex); replaced = regEx.Replace(mhtFile, ""); Response.Write(replaced); 

对于那些感兴趣的人,这个链接在.mht文件中。 这就是为什么3D放在=符号之后。 变量mhtFile包含普通mht文本中的整个mht文件。