Domanda

Ho cercato di risolvere questi problemi per due ore, ma sembra che non riesco a trovare alcuna soluzione.

Ho bisogno di estragga i collegamenti da un file HTML. Ci sono 100 + link, ma solo 25 di loro sono validi.

link validi sono situate all'interno

<td><a href=" (link) ">

Per prima cosa ho avuto (e hanno ancora) un problema con le virgolette doppie all'interno stringhe letterali. Così, ho sostituito alla lettera con le stringhe "normali" in modo da poter usare \ "per", ma il problema è che questo Regex ho scritto non funziona

Match LinksTemp = Regex.Match(
                              htmlCode,
                              "<td><a href=\"(.*)\">",
                              RegexOptions.IgnoreCase);

come ottengo "<td><a href="http://www.google.com"> come output, invece di http://www.google.com

Qualcuno sa come posso risolvere questo problema e come posso usare le virgolette all'interno di stringhe letterali (ad esempio @ "<> 'das' sa")

È stato utile?

Soluzione

Fuggito campione virgolette doppie: @"some""test"
campione Regex: "<a href=\"(.*?)\">"

    var match = Regex.Match(html, "<td><a href=\"(.*?)\">", 
RegexOptions.Singleline); //spelling error
    var url = match.Groups[1].Value;

Inoltre si consiglia di utilizzare Regex.Matches(...) invece di Regex.Match(...)

Altri suggerimenti

Se si vuole prendere ogni elemento semplicemente utilizzare il codice in questo modo:

string htmlCode = "<td><a href=\" www.aa.pl \"><td> <a href=\" www.cos.com \"><td>";
Regex r = new Regex( "<a href=\"(.*?)\">", RegexOptions.IgnoreCase );
MatchCollection mc = r.Matches(htmlCode);

foreach ( Match m1 in mc ) {                
   MessageBox.Show( m1.Groups[1].ToString() );
}

Perché non analizzare questo con una HTML-parsing è buono e veloce HTML-analisi. Esempio:

   string HTML = "<td><a href='http://www.google.com'>";

            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(HTML);
            HtmlNodeCollection a = doc.DocumentNode.SelectNodes("//a[@href]");

            string url = a[0].GetAttributeValue("href", null);

            Console.WriteLine(url);
            Console.ReadLine();

si deve importare using HtmlAgilityPack;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top