Wie extrahiere ich Werte aus HTML mit Regex?
-
26-10-2019 - |
Frage
Angesichts der folgenden HTML:
<p><span class="xn-location">OAK RIDGE, N.J.</span>, <span class="xn-chron">March 16, 2011</span> /PRNewswire/ -- Lakeland Bancorp, Inc. (Nasdaq: <a href='http://studio-5.financialcontent.com/prnews?Page=Quote&Ticker=LBAI' target='_blank' title='LBAI'> LBAI</a>), the holding company for Lakeland Bank, today announced that it redeemed <span class="xn-money">$20 million</span> of the Company's outstanding <span class="xn-money">$39 million</span> in Fixed Rate Cumulative Perpetual Preferred Stock, Series A that was issued to the U.S. Department of the Treasury under the Capital Purchase Program on <span class="xn-chron">February 6, 2009</span>, thereby reducing Treasury's investment in the Preferred Stock to <span class="xn-money">$19 million</span>. The Company paid approximately <span class="xn-money">$20.1 million</span> to the Treasury to repurchase the Preferred Stock, which included payment for accrued and unpaid dividends for the shares.  This second repayment, or redemption, of Preferred Stock will result in annualized savings of <span class="xn-money">$1.2 million</span> due to the elimination of the associated preferred dividends and related discount accretion.  A one-time, non-cash charge of <span class="xn-money">$745 thousand</span> will be incurred in the first quarter of 2011 due to the acceleration of the Preferred Stock discount accretion.  The warrant previously issued to the Treasury to purchase 997,049 shares of common stock at an exercise price of <span class="xn-money">$8.88</span>, adjusted for stock dividends and subject to further anti-dilution adjustments, will remain outstanding.</p>
Ich möchte die Werte in die Werte bekommen <span>
Elemente. Ich möchte auch den Wert des class
Attribut auf der <span>
Elemente.
Idealerweise konnte ich einfach HTML durch eine Funktion führen und ein Wörterbuch von extrahierten Einheiten zurückerhalten (basierend auf dem <span>
oben definiertes Parsen).
Der obige Code ist ein Snippet aus einer größeren HTML -Datei mit größerer Quelle, die mit einem XML -Parser nicht anpostet. Ich suche also nach einem möglichen regelmäßigen Ausdruck, um die Interessensinformationen zu extrahieren.
Lösung
Verwenden Sie dieses Tool (kostenlos):http://www.radsoftware.com.au/regexdesigner/
Verwenden Sie diese Regex:
"<span[^>]*>(.*?)</span>"
Die Werte in Gruppe 1 (für jedes Spiel) sind der Text, den Sie benötigen.
In C# wird es aussehen wie:
Regex regex = new Regex("<span[^>]*>(.*?)</span>");
string toMatch = "<span class=\"ajjsjs\">Some text</span>";
if (regex.IsMatch(toMatch))
{
MatchCollection collection = regex.Matches(toMatch);
foreach (Match m in collection)
{
string val = m.Groups[1].Value;
//Do something with the value
}
}
Ammended, um einen Kommentar zu beantworten:
Regex regex = new Regex("<span class=\"(.*?)\">(.*?)</span>");
string toMatch = "<span class=\"ajjsjs\">Some text</span>";
if (regex.IsMatch(toMatch))
{
MatchCollection collection = regex.Matches(toMatch);
foreach (Match m in collection)
{
string class = m.Groups[1].Value;
string val = m.Groups[2].Value;
//Do something with the class and value
}
}
Andere Tipps
Angenommen, Sie haben keine verschachtelt Span -Tags, Folgendes sollte funktionieren:
/<span(?:[^>]+class=\"(.*?)\"[^>]*)?>(.*?)<\/span>/
Ich habe nur einige grundlegende Tests dazu durchgeführt, aber es wird mit der Klasse des Span -Tags (falls vorhanden) zusammen mit den Daten übereinstimmen, bis das Tag geschlossen ist.
ich stark Beraten Sie stattdessen einen echten HTML- oder XML -Parser. Sie können HTML oder XML nicht mit regulären Ausdrücken zuverlässig analysieren-Das Beste, was Sie tun können, ist näher zu kommen, und je näher Sie kommen, desto verschlungener und zeitaufwändiger Ihre Regex wird sein. Wenn Sie eine große HTML -Datei zum Analysen haben, ist es sehr wahrscheinlich, dass ein einfaches Regex -Muster brechen.
Regex mag <span[^>]*>(.*?)</span>
wird an Ihrem Beispiel arbeiten, aber es gibt viele XML-Valid-Code, der schwierig oder sogar unmöglich mit Regex zu analysieren ist (zum Beispiel, <span>foo <span>bar</span></span>
wird das obige Muster brechen). Wenn Sie etwas wollen, das auf anderen HTML -Samples funktioniert, ist Regex nicht der richtige Weg hierher.
Da Ihr HTML-Code nicht XML-Valid ist, betrachten Sie die HTML Agility Pack, was ich gehört habe, ist sehr gut.