RegEx从HTML源代码中提取特定的URL格式
本文关键字:URL 格式 提取 HTML 源代码 RegEx | 更新日期: 2023-09-27 18:21:34
我在RegEx方面遇到问题,并试图从页面的HTML源代码中提取一个特定格式的HTML链接。
HTML源代码包含许多这样的链接。链接的格式为:
<a class="link" href="pagedetail.html?record_id=123456">RecordName</a>
对于每个匹配的链接,我希望能够轻松地提取以下两位信息:
- URL位。例如pagedetail.html?record_id=12346
- 链接名称。例如RecordName
有人能帮我吗,因为我完全陷入困境了。我需要这个用于C#程序,所以如果有任何特定于C#的符号,那就太好了。感谢
TIA
人们会告诉你不应该用REGEX解析HTML。我认为这是一个有效的说法。
但有时,格式良好的HTML和真正简单的案例,就像它看起来是你的。你可以使用一些正则表达式来完成这项工作。
例如,您可以使用此regex并获得URL的组1和RecordName 的组2
<a class="link" href="([^"]+)">([^<]+)<
演示
我觉得回答这个问题有点傻,因为通过对你的问题的两条评论应该很明显,但是。。。
您不应该使用REGEX解析HTML!
使用XML解析器,或者更好的是,使用专用工具,如HTML敏捷包(它仍然是一个XML解析器,但更喜欢使用HTML)。
您可以使用TagRegex和EndTagRegex类来解析html字符串并找到所需的标记。您需要遍历html字符串中的所有字符,以找到所需的标记。
例如
var position = 0;
var tagRegex = new TagRegex();
var endTagRegex = new EndTagRegex();
while (position < html.length)
{
var match = tagRegex.Match(html, position);
if (match.Success)
{
var tagName = match.Groups["tagname"].Value;
if (tagName == "a")
{ ... }
}
else if (endTagRegex.match(html, position).Success)
{
var tagName = match.Groups["tagname"].Value;
if (tagName == "a")
{ ... }
}
position++;
}