estratto collega regex c #
-
26-10-2019 - |
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")
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;