Ottengo il codice seguente da un browser web.
Il mio codice sorgente: (Html)
<dl class="field-dl output-field-dl" >
<dt class="field-dt output-field-dt">
<label><span>Product Code:</span></label>
</dt>
<dd class="field-dd output-field-dd ">
0234567
</dd>
</dl>
<dl class="field-dl output-field-dl" >
<dt class="field-dt output-field-dt">
<label><span>Per no:</span></label>
</dt>
<dd class="field-dd output-field-dd ">
123456
</dd>
</dl>
Come estraggo il codice del mio prodotto?
Il mio codice attuale è qui:
var rx = new Regex("<span>Product Code:</span></label></dt><dd class="field-dd output-field-dd ">(.*?)</dd>\s");
var m = rx.Matches(kaynak);
foreach (Match match in m)
{
string key = match.Groups[1].Value;
}
Grazie!
risposte:
0 per risposta № 1Il codice di esempio ha molto più spazio bianco rispetto agli handle di regex. Potresti aggiungere s*
prima di ogni <
e dopo ogni >
, ma solo uno tra di loro. Qualcosa di simile a:
new Regex("<span>\s*Product Code:\s*</span>\s*</label>\s*</dt>\s*<dd class="field-dd output-field-dd ">(.*?)</dd>\s");
Il gruppo di cattura (.*?)
potrebbe essere troppo generoso. suggerirei ([^<>])
. Se preferisci il file .
quindi impostare la regex per accettare le nuove righe all'interno .
potrebbe essere necessario. Quindi considera l'utilizzo di:
new Regex(... , RegexOptions.Singleline);
Tuttavia, come dicono altri, è probabilmente meglio utilizzare routine di analisi HTML o XML. Questa risposta ha lo scopo di riferirsi solo alla parte regex della tua domanda.
0 per risposta № 2
Puoi usare LINQ to XML:
XElement doc = XElement.Parse(html);
var query = doc.Descendants("dd").Select(elem => elem.Value).ToList();
foreach (var v in query)
Console.WriteLine(v);