j'ai inspiré de l'exemple spectacle dans l'URL suivante csharp-online et destiné à récupérer toutes les URL de cette page alexaURL à l'aide regex Extraction dans .NET
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Text.RegularExpressions;
namespace ExtractingUrls
{
class Program
{
static void Main(string[] args)
{
WebClient client = new WebClient();
const string url = "http://www.alexa.com/topsites/category/Top/Society/History/By_Topic/Science/Engineering_and_Technology";
string source = client.DownloadString(url);
//Console.WriteLine(Getvals(source));
string matchPattern =
@"<a.rel=""nofollow"".style=""font-size:0.8em;"".href=[""'](?<url>[^""^']+[.]*)[""'].class=""offsite"".*>(?<name>[^<]+[.]*)</a>";
foreach (Hashtable grouping in ExtractGroupings(source, matchPattern, true))
{
foreach (DictionaryEntry DE in grouping)
{
Console.WriteLine("Value = " + DE.Value);
Console.WriteLine("");
}
}
// End.
Console.ReadLine();
}
public static ArrayList ExtractGroupings(string source, string matchPattern, bool wantInitialMatch)
{
ArrayList keyedMatches = new ArrayList();
int startingElement = 1;
if (wantInitialMatch)
{
startingElement = 0;
}
Regex RE = new Regex(matchPattern, RegexOptions.Multiline);
MatchCollection theMatches = RE.Matches(source);
foreach (Match m in theMatches)
{
Hashtable groupings = new Hashtable();
for (int counter = startingElement; counter < m.Groups.Count; counter++)
{
// If we had just returned the MatchCollection directly, the
// GroupNameFromNumber method would not be available to use
groupings.Add(RE.GroupNameFromNumber(counter),
m.Groups[counter]);
}
keyedMatches.Add(groupings);
}
return (keyedMatches);
}
}
}
Mais ici je fais face à un problème, Lorsque j'exécute chaque URL s'affiche trois fois, c'est d'abord l'ensemble de l'étiquette d'ancrage qui s'affiche, ensuite l'URL est affichée deux fois. Quelqu'un peut-il me suggérer où dois-je corriger afin que je puisse avoir chaque URL affichée exactement une fois.
** DO _NOT_ parse HTML utilisant des expressions régulières ** http://stackoverflow.com/questions/1732348/regex-match-open-tags- except-xhtml-self-contained-tags – SLaks
@SLacks: "il est parfois approprié d'analyser un ensemble limité et connu de HTML" –