我需要在C#中为html源代码中的锚标记使用正则表达式尽可能通用。考虑一下这个HTML代码:
<a id="[constant]"
href="[specific]"
>GlobalPlatform Card Specification 2.2
March, 2006</a>
通过[常量]我的意思是该值是一个常量字符串,所以它没有问题。通过[具体]我的意思是地址是一个简单而具体的字符串,因此它的正则表达式很简单。主要问题是我无法处理锚标签中间的换行符。之前我写过这个正则表达式,除了处理锚标记标题之间的换行符之外,效果很好。
<a[\\s\\n\\r]+id=\"[constant]"[\\s\\n\\r]+href=\"[specific]"[\\s\\n\\r]*>[\\s\\n\\r]*[^\\n\\r]+[\\s\\n\\r]*</a>
请帮帮我
答案 0 :(得分:6)
在解析HTML时,你应该远离正则表达式,并使用像HTML Agility Pack这样的HTML解析器。
为了帮助您入门,请检查解析单个锚标记的简单程度。
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<a id=""[constant]""
href=""[specific]""
>GlobalPlatform Card Specification 2.2
March, 2006</a>
");
var anchor = doc.DocumentNode.Element("a");
Console.WriteLine(anchor.Id);
Console.WriteLine(anchor.Attributes["href"].Value);
打败正则表达式,你不觉得吗? :)
答案 1 :(得分:2)
如果您使用的是C#,则可以在创建Regex时定义选项多行,
Regex r = new Regex(pattern, RegexOptions.Multiline);