C# 匹配两个已知字符串之间的任何字符串
我试图在一个html页面中匹配多个HREF,但似乎无法使其正常工作。当我使用正则表达式时,没有匹配项。如何获得整个href的多个匹配项,并将它们分为两个指定组 要匹配的多个示例href:C# 匹配两个已知字符串之间的任何字符串,c#,regex,href,C#,Regex,Href,我试图在一个html页面中匹配多个HREF,但似乎无法使其正常工作。当我使用正则表达式时,没有匹配项。如何获得整个href的多个匹配项,并将它们分为两个指定组 要匹配的多个示例href: <a href="/string1/any string here/string2">text here</a> 我的正则表达式代码: MatchCollection m1 = Regex.Matches(result, @"<a\shref=""(?<url>(\/
<a href="/string1/any string here/string2">text here</a>
我的正则表达式代码:
MatchCollection m1 = Regex.Matches(result, @"<a\shref=""(?<url>(\/string1\/).*?(\/string2))"">(?<text>.*?)</a>", RegexOptions.Singleline);
这是可行的,但与我不感兴趣的HREF匹配,除了我需要的:
MatchCollection m1 = Regex.Matches(result, @"<a\shref=""(?<url>(\/string1\/).*?)"">(?<text>.*?)</a>", RegexOptions.Singleline);
使用
正如在注释中提到的,使用真正的html解析器,比如代替正则表达式
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(@"<a href=""/string1/any string here/string2"">text here</a>");
var links = doc.DocumentNode
.SelectNodes("//a[@href]")
.Select(a=>a.Attributes["href"].Value)
.ToList();
你需要任何线索给你一个建议你的问题是什么?很好,你有一些正则表达式,但是你的代码在哪里?显示预期行为/输出和实际行为/输出。抱歉,第一次使用stackoverflow。我编辑了我的问题。我试图让它变得简单,以便返回给我的所有匹配项看起来像:/string1/anystring1/string2,string1/anystring2/string2,等等。Hanks,这一个有效:谢谢,我也会尝试一下。哇,这很容易,我可以看出长期使用html解析器可能更安全。我能够添加一些LINQ过滤器,以缩小到我需要的范围。
<a href="(\/string1\/)([^\/]+)(\/string2)">
(?<=<a href="\/string1\/)[^\/]*(?=\/string2">)
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(@"<a href=""/string1/any string here/string2"">text here</a>");
var links = doc.DocumentNode
.SelectNodes("//a[@href]")
.Select(a=>a.Attributes["href"].Value)
.ToList();
var links = doc.DocumentNode
.Descendants("a")
.Where(a=>a.Attributes["href"]!=null)
.Select(a=>a.Attributes["href"].Value)
.ToList();