正则表达式#从<a> tag

时间:2017-02-08 16:21:10

标签: c# regex url extract

I am trying to extract URL from an tag, however, instead of getting https://website.com/-id1中提取网址,我收到了标记链接文字。这是我的代码:

i= User.first.languages.select('languages.*,language_users.level')

我得到的结果是 MyLink ,这不是我想要的。我想要像

这样的东西
string text="<a style=\"font - weight: bold; \" href=\"https://website.com/-id1\">MyLink</a>";

 string parsed = Regex.Replace(text, " <[^>] + href =\"([^\"]+)\"[^>]*>", "$1 " );

    parsed = Regex.Replace(parsed, "<[^>]+>", "");

    Console.WriteLine(parsed);

任何帮助或链接都将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

正则表达式可以在HTML的非常具体,简单的情况下使用。例如,如果文本仅包含 单个标记,则可以使用"href\\s*=\\s*\"(?<url>.*?)\""提取URL,例如:

var url=Regex.Match(text,"href\\s*=\\s*\"(?<url>.*?)\"").Groups["url"].Value;

此模式将返回:

https://website.com/-id1

这个正则表达式没有任何花哨的东西。它查找具有可能空格的href=,然后以非贪婪的方式(.*?)捕获第一个双引号和下一个双引号之间的任何内容。这是在命名组url中捕获的。

任何更奇特的事情都变得非常复杂。例如,支持单引号和双引号将需要特殊处理以避免在单引号上开始并以双引号结束。该字符串可以使用两种类型的引号的多个<a>标记。

对于复杂的解析,最好使用像AngleSharpHtmlAgilityPack这样的库

答案 1 :(得分:0)

试试这个:

var input = "<a style=\"font - weight: bold; \" href=\"https://website.com/-id1\">MyLink</a><a style=\"font - weight: bold; \" href=\"https://website.com/-id2\">MyLink2</a>";
var r = new Regex("<a.*?href=\"(.*?)\".*?>");
var output = r.Matches(input);
var urls = new List<string>();
foreach (var item in output) {
    urls.Add((item as Match).Groups[1].Value);
}

它将找到所有标签并提取其href值,然后将其存储在URL列表中。

说明

<a匹配&lt; a&gt;的开头标签
.*?href=匹配任何内容,直到href =
"(.*?)"匹配并捕获“”内的任何内容 .*?>匹配&lt; a&gt;的结尾标签