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. &#160;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. &#160;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. &#160;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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top