Попробуйте это:
^(?:\w+://)?([^/?]*)
это слабое регулярное выражение - оно не проверяет строку, но предполагает, что это уже URL, и получает первое слово до первой косой черты, игнорируя протокол. Чтобы получить домен, посмотрите на первую захваченную группу, например:
string url = "http://www.google.com/hello";
Match match = Regex.Match(url, @"^(?:\w+://)?([^/?]*)");
string domain = match.Groups[1].Value;
В качестве бонуса, он также захватывает до первого ?
, поэтому URL google.com?hello=world
будет работать как положено.