[英]What is the REGEX to match this pattern in a html document in C#?
我真的不知道如何最好地做到这一点,我可以做相当简单的regex表达式,但是更复杂的regex表达式确实使我感到困惑。
以下内容出现在特定的HTML文档中:
<span id="label">
<span>
<a href="http://variableLink">Joe Bloggs</a>
now using
</span>
<span>
'
<a href="/variableLink/">Important Data</a>
'
</span>
<span>
on
<a href="/variableLink">Important data 2</a>
</span>
</span>
我需要提取两个“重要数据”点,并可能要花费数小时来研究正则表达式(我正在使用C#3.5中的.net正则表达式库)。
如前所述,正则表达式通常不是解析HTML,XML和好友的正确工具-考虑使用HTML或XML解析库。 如果您确实想要或必须使用正则表达式,则在许多情况下,以下内容将与标记的内容匹配,但在某些情况下仍可能失败。
<a href="[^"]*">(?<data>[^<]*)</a>
该表达式将匹配所有不以http://
开头的链接-这是链接之间唯一可见的区别。
<a href="(?!http://)[^"]*">(?<data>[^<]*)</a>
下面使用HtmlAgilityPack 。 它在“标签” ID内的第二个或更高版本的链接中打印任何文本。 当然,修改XPath进行一些不同的操作相对简单。
HtmlDocument doc = new HtmlDocument();
doc.Load(new StringReader(@"<span id=""label"">
<span>
<a href=""http://variableLink"">Joe Bloggs</a>
now using
</span>
<span>
'
<a href=""/variableLink/"">Important Data</a>
'
</span>
<span>
on
<a href=""/variableLink"">Important data 2</a>
</span>
</span>
"));
HtmlNode root = doc.DocumentNode;
HtmlNodeCollection anchors;
anchors = root.SelectNodes("//span[@id='label']/span[position()>=2]/a/text()");
IList<string> importantStrings;
if(anchors != null)
{
importantStrings = new List<string>(anchors.Count);
foreach(HtmlNode anchor in anchors)
importantStrings.Add(((HtmlTextNode)anchor).Text);
}
else
importantStrings = new List<string>(0);
foreach(string s in importantStrings)
Console.WriteLine(s);
查找.NET的后向和前向语法,并使用该语法在HTML中查找锚标记。 该站点可能会为您提供帮助。 作为正则表达式的替代方法,您可以考虑使用System.Xml.XPath.XPathNavigator
直接寻址这些节点。
我的Regex有点生锈,但是遵循以下内容可能会有所帮助(尽管可能需要进行一些微调):
(?<=\<a href="/variableLink[/]?"\>)(.*)+(?=</a>)
<a\shref.*?"/variableLink/?">(.*)</a>
第一组包含锚点的名称。 经过Expresso测试。 适用于您提供的示例文本。
更新 :也适用于Snippy。
Regex regex = new Regex(@"<a\shref.*?""/variableLink/?"">(.*)</a>", RegexOptions.Multiline);
foreach (Match everyMatch in regex.Matches(sText))
{
Console.WriteLine("{0}", everyMatch.Groups[1]);
}
输出:
Important Data
Important data 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.