3 Stimmen

.NET regex innerer Text zwischen td, span, a Tag

<table >
    <tr>
        <td colspan="2" style="height: 14px">
            tdtext1
            <a>hyperlinktext1<a/> 
        </td>
    </tr>
    <tr>
        <td>
            tdtext2
        </td>
        <td>
            <span>spantext1</span>
        </td>
    </tr>
</table>   

Dies ist mein Beispieltext. Wie man einen regulären Ausdruck in C# schreibt, um die Treffer zu erhalten für den inneren Text für td , span , Hyperlinks.

8voto

Josh Punkte 66190

Ich erschaudere jedes Mal, wenn ich die Worte Regex und HTML im selben Satz höre. Ich würde vorschlagen, dass Sie sich die HtmlAgilityPack auf CodePlex, einem sehr toleranten HTML-Parser, mit dem Sie XPath-Abfragen gegen das geparste Dokument verwenden können. Es ist viel sauberer und die Person, die Ihren Code erbt, wird es Ihnen danken!

EDITAR

Wie in den Kommentaren unten beschrieben, finden Sie hier einige Beispiele, wie Sie den InnerText dieser Tags erhalten können. Sehr einfach.

var doc = new HtmlDocument();
doc.LoadHtml("...your sample html...");

// all <td> tags in the document
foreach (HtmlNode td in doc.DocumentNode.SelectNodes("//td")) {
    Console.WriteLine(td.InnerText);
}

// all <span> tags in the document
foreach (HtmlNode span in doc.DocumentNode.SelectNodes("//span")) {
    Console.WriteLine(span.InnerText);
}

// all <a> tags in the document
foreach (HtmlNode a in doc.DocumentNode.SelectNodes("//a")) {
    Console.WriteLine(a.InnerText);
}

1voto

MAG TOR Punkte 111
        static void Main(string[] args)
    {
        //...
       // using (WebClient client = new WebClient()) // WebClient class inherits IDisposable
       // {
        HtmlDocument doc = new HtmlWeb().Load("http://www.freeclup.com");

            foreach (HtmlNode span in doc.DocumentNode.SelectNodes("//span"))
            {
                Console.WriteLine(span.InnerText);
            }
            Console.ReadKey();

      //  }
    }

0voto

Some User Punkte 27

Du könntest etwas verwenden wie:

        const string pattern = @"[a|span|td]>\s*?(?<text>\w+?)\s*?</\w+>";
        Regex regex = new Regex(pattern, RegexOptions.Singleline);
        MatchCollection m = regex.Matches(x);
        List<string> list = new List<string>();

        foreach (Match match in m)
        {
            list.Add(match.Groups["text"].Value);
        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X