原始正則 href=(['\""]?)(?<url>[^'\"\"\\s>]+) 無法匹配含空格的 URL(如 href=\" https://example.com \"),導致提取失敗。
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['\""]?)(\s*?<url>[^'\"\"\\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
關鍵改動:在捕獲組前加入 \\s*? 匹配可選空白字符(空格、換行、Tab)。
string html = "<a href=\" https://test.com \">Link</a>";
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['\""]?)\s*(?<url>[^'\"\"\\s>]+)\1[^>]*>(?<text>.*?)</a>");
MatchCollection mc = reg.Matches(html);
foreach (Match m in mc) {
Console.WriteLine("URL: " + m.Groups["url"].Value.Trim());
Console.WriteLine("Text: " + m.Groups["text"].Value.Trim());
}
HtmlAgilityPack 或 AngleSharp 等專用庫,比正則更健壯、可維護。