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

时间:2014-09-12 08:56:50

标签: c# html regex

我遇到了RegEx问题,并尝试从网页的HTML源代码中提取特定格式的HTML链接。

HTML源包含许多这些链接。链接格式为:

<a class="link" href="pagedetail.html?record_id=123456">RecordName</a>

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

  1. 网址位。例如。 pagedetail.html?RECORD_ID = 123456
  2. 链接名称。例如。 RecordName
  3. 任何人都可以帮忙解决这个问题,因为我完全陷入困境。我需要这个用于C#程序,所以如果有任何C#特定符号那么那将是很好的。感谢

    TIA

3 个答案:

答案 0 :(得分:0)

我觉得有点愚蠢地回答这个问题,因为通过对你的问题的两条评论应该很明显,但是......

You should not parse HTML with REGEX!

使用XML解析器,或者更好的是,使用专用工具,例如HTML Agility Pack(它仍然是XML解析器,但更适合使用HTML)。

答案 1 :(得分:0)

您可以使用TagRegexEndTagRegex类来解析html字符串并查找所需的标记。您需要遍历html字符串中的所有字符以找出所需的标记。

e.g。

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++;
}

答案 2 :(得分:0)

人们会告诉你不应该用REGEX解析HTML。我认为这是一个有效的陈述。

但有时格式化的HTML格式很简单,看起来很容易就是你的。您可以使用一些正则表达式来完成这项工作。

例如,您可以使用此正则表达式并获取URL的组1和RecordName的组2

<a class="link" href="([^"]+)">([^<]+)<

DEMO