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文件。
- 从MVC 4 Web Api返回匿名类型失败,出现序列化错误
- 使用TFS API和SSRS以编程方式生成报告
- ASP.NET Web API和OpenID Connect:如何从授权代码获取访问令牌
- 从List 创建MVC3 CheckBoxFor并在Post上获取列表(使用更新的值)
- 使用HttpWebRequest使用multipart / form-data POST数据/上传图像
- 如何在wpf ViewModel中实现observable int?
- 可以跨进程或机器边界使用Reactive Extensions(Rx)吗?
- 如何从C#中的IntPtr获取byte
- Xamarin表单更新listView itemSource