По какой причине не подходит Html Agility Pack? Он как раз умеет это хорошо делать.
Можно, конечно, написать регулярное выражение, но проблема с HTML в том, что он нерегулярный. Т.е. у атрибута могут быть кавычки, могут не быть, может одна быть. Тэг может быть закрыт, а может нет.
Все это придеться учитывать в регулярном выражении.
var matches = (new Regex("<form.*?action=(\"[^\\\"]+?\"|'[^\']+?'|[\\S]+?).*?>"
, RegexOptions.Singleline | RegexOptions.IgnoreCase)
).Matches("HTML CODE <form action=1><form action='2'><form action=\"3\">");
foreach(Match m in matches)
{
var actionValue = m.Groups[1].Value.Trim(new char[]{'\'','"'});
}
Вот так к примеру:
https://dotnetfiddle.net/Iuuy56