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>

对于每个匹配的链接,我希望能够轻松地提取以下两位信息:

  1. URL位。例如pagedetail.html?record_id=12346
  2. 链接名称。例如RecordName

有人能帮我吗,因为我完全陷入困境了。我需要这个用于C#程序,所以如果有任何特定于C#的符号,那就太好了。感谢

TIA

RegEx从HTML源代码中提取特定的URL格式

人们会告诉你不应该用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++;
}