C#正则匹配转义引号包裹的src/href指定后缀资源链接
解决C#中捕获HTML转义引号包裹的src/href资源链接问题
正则表达式方案
针对你的需求,以下正则可以精准匹配被转义引号包裹、属于src或href属性且带有指定后缀(pdf/jpg/png/gif)的资源链接:
string pattern = @"(?<=src=\\\""|href=\\\"").*?\.(?:pdf|jpg|png|gif)(?=\\\")";
正则逻辑解释
(?<=src=\\\""|href=\\\""):正向预查,确保匹配内容的前缀是src=\"或href=\",限定只匹配这两个属性内的链接.*?:非贪婪模式匹配任意字符,避免过度匹配到属性外的内容\.(?:pdf|jpg|png|gif):匹配指定的文件后缀,使用非捕获组减少不必要的分组开销(?=\\\"):正向预查,确保匹配内容的后缀是转义引号\",保证只捕获属性值内部的链接
C#代码示例
using System; using System.Text.RegularExpressions; public class ResourceLinkExtractor { public static void Main() { // 模拟从JSON读取的HTML字符串(包含转义引号) string htmlFromJson = "<a href=\"http://www.mysite.no/webdocs/mypdf.pdf\">Download</a><img src=\"http://www.mysite.no/assets/photo.png\" title=\"photo.png\">"; string pattern = @"(?<=src=\\\""|href=\\\"").*?\.(?:pdf|jpg|png|gif)(?=\\\")"; MatchCollection matches = Regex.Matches(htmlFromJson, pattern); foreach (Match match in matches) { Console.WriteLine("捕获到的资源链接: " + match.Value); } } }
运行结果:
捕获到的资源链接: http://www.mysite.no/webdocs/mypdf.pdf 捕获到的资源链接: http://www.mysite.no/assets/photo.png
可以看到,title属性中的photo.png不会被匹配,完全符合需求。
之前尝试的问题分析
- 第一个正则未限定
src/href属性范围,会匹配所有转义引号内的带后缀内容(比如alt/title属性值),导致错误捕获。 - 第二个正则使用
[^\s]*贪婪匹配,且未限定结束的引号边界,会过度捕获到属性外的标签内容,出现错误匹配。
内容的提问来源于stack exchange,提问作者Greger Gundersen
相关产品推荐
相关产品推荐

