使用C#中的regex分组构造获取值
本文关键字:获取 中的 regex 使用 | 更新日期: 2023-09-27 18:25:20
大家好,我对正则表达式很陌生,我正试图从html网页中的img标记中获取srcs值,所以我制作了这个正则表达式:@"<img.*src *=*(['x22'x27])(?<path>.+)('1).*/>"
但是,当我尝试使用以下示例标记从组"path"中获取值时:<img src='kkkkkk' class='icon' alt='' />
我得到的是kkkkkk' class='icon' alt='
而不是kkkkkk
。我就是想不通
这是我用来导出和打印数据的代码:
Regex SrcRegex = new Regex(@"<img.*src *=*(['x22'x27])(?<path>.+)('1).*/>", RegexOptions.IgnoreCase);
string TestTag = "<img src='kkkkkk' class='icon' alt='' />";
MatchCollection MatchedString = SrcRegex.Matches(ReadIn);
foreach (Match M in MatchedString)
Console.WriteLine(M.Groups["path"].Value);
谢谢大家的关注,请原谅我的英语。
处理html时,最好使用html解析器而不是regex。例如使用HtmlAgilityPack
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlstring);
var imgUrls = doc.DocumentNode.Descendants("img")
.Select(img => img.Attributes["src"].Value)
.ToList();
要用正则表达式来回答,问题很简单,因为您在(?<path>.+)
中使用了贪婪的量词,所以它与最后一个引号匹配,而不是您想要的下一个引号。让它不贪婪:
Regex SrcRegex = new Regex(@"<img.*src *= *(['x22'x27])(?<path>.+?)('1).*/>", RegexOptions.IgnoreCase);
顺便说一句,我在=后面加了一个空格,因为我认为这就是你想要的。您需要=,并可以选择在其后面匹配空格,对吗?按照您的方式,它将匹配零个或多个=符号,=和开头引号之间不允许有空格。