[英]regex c# extracting url from <a> tag
我試圖從標記中提取URL,但是,我得到的是標記鏈接文本,而不是獲取https://website.com/-id1 。 這是我的代碼:
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);
我得到的結果是MyLink ,這不是我想要的。 我想要類似的東西
https://website.com/-id1
任何幫助或鏈接將受到高度贊賞。
正則表達式可以在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>
標簽。
對於復雜的解析,最好使用像AngleSharp或HtmlAgilityPack這樣的庫
嘗試這個:
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
a匹配<a>標簽的開頭
.*?href=
匹配任何東西,直到href =
"(.*?)"
匹配並捕獲任何內部“”
.*?>
匹配<a>標簽的結尾
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.