Finding all href values in a HTML string with C# .NET

Say you’d like to collect all link URLs in a HTML text. E.g.:

<html>
   <p>
     <a href=\"http://www.fantasticsite.com\">Visit fantasticsite!</a>
   </p>
   <div>
     <a href=\"http://www.cnn.com\">Read the news</a>
   </div>
</html>

The goal is to find “http://www.fantasticsite.com&#8221; and “http://www.cnn.com&#8221;. Using an XML parser could be a solution if the HTML code is well formatted XML. This is of course not always the case so the dreaded regular expressions provide a viable alternative.

The following code uses a Regex to find those sections in the input text that match a regular expression:

static void Main(string[] args)
{
	string input = "<html><p><a href=\"http://www.fantasticsite.com\">Visit fantasticsite!</a></p><div><a href=\"http://www.cnn.com\">Read the news</a></div></html>";
	FindHrefs(input);
	Console.WriteLine("Main done...");
	Console.ReadKey();
}

private static void FindHrefs(string input)
{
	Regex regex = new Regex("href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))", RegexOptions.IgnoreCase);
	Match match;
	for (match = regex.Match(input); match.Success; match = match.NextMatch())
	{
		Console.WriteLine("Found a href. Groups: ");
		foreach (Group group in match.Groups)
		{
			Console.WriteLine("Group value: {0}", group);
		}				
	}

}

This gives the following output:

FindHrefs Regexp in action

View all posts related to string and text operations here.

About Andras Nemes
I'm a .NET/Java developer living and working in Stockholm, Sweden.

8 Responses to Finding all href values in a HTML string with C# .NET

  1. rsp says:

    Nice, Thanks Andras.

  2. Subhash PM says:

    Good Article… Thanks.. 🙂

  3. mathewpoc says:

    Excellent work. I appreciate it.

  4. Faniel Joseph Selvaraj says:

    Thanks Andras… it was very much useful…Thank you…

  5. SURESH says:

    Thanks Andras. its very useful.

  6. Vilas Meshram says:

    I am able to retrive href value by using your code. but how to retrieve “path” value? I tried to replace “href” with “path” but not getting proper value. How to replace “%20” with “” and “%2c” with “,” using regular expression using C#?

    I need expected result As : ddn/SpecialDeals/Lists/SpecialDeals/7803_.000/Bolar, Suni – to file.pdf

    from result = href=”/ddn/SpecialDeals/_layouts/QuestSoftware/ItemHandler.ashx?path=/ddn/SpecialDeals/Lists/SpecialDeals/7803_.000/Bolar%2c%20Suni%20-%20to%20file.pdf”

    Origional string:

    Bolar, Suni – to file.pdf

    Thanks in Advance Andras

  7. Sororfortuna says:

    Sorry about reviving this post if that’s a problem, I am currently having problems on the following line: Console.WriteLine(“Group value: {0}”, group);
    How would one be able to just get the path without the ‘ href=”” ‘?

  8. Abdul Rashid says:

    Perfect and very useful. Thanks.

Leave a comment

Elliot Balynn's Blog

A directory of wonderful thoughts

Software Engineering

Web development

Disparate Opinions

Various tidbits

chsakell's Blog

WEB APPLICATION DEVELOPMENT TUTORIALS WITH OPEN-SOURCE PROJECTS

Once Upon a Camayoc

Bite-size insight on Cyber Security for the not too technical.