2010-12-19 12 views
0
<tr bgcolor='#C0C0C0'> 
    <td>ID</td><td>personName</td> 
    <td>homePhone<br>officePhone</td> 
    <td>city</td> 
    <td>street</td> 
</tr> 

ok bekommen, so ist dies ein Stück HTML ich als WebResponse bekommen, und ich brauche es mit grups zu analysieren, um die ID zu extrahieren, person, Stadt, homephone, BüroTelefon und Straße.kann nicht die richtige Regex für diese einfache html

Kann mir jemand gibt einen RegexMuster dafür? Ich habe es stundenlang versucht und ich kann nicht sehen, wo ich falsch liege. Wie auch immer, es gibt ein nettes Werkzeug, um Regex-Ausdrücke zu erstellen, das Ausführen der Anwendung immer und immer wieder ist ein Schmerz. Vielen Dank.

+5

First off, RegEx eine schlechte Wahl als HTML-Parser. Sie sollten einen HTML-Parser für Ihre Plattform und Sprache verwenden. Zweitens Welche Sprache/Plattform verwenden Sie? RegEx Dialekte können sehr unterschiedlich sein. – Oded

+4

Lesen Sie hier ausführliche Erklärung in Bezug auf Ihr Problem: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

http: // www. regexbuddy.com/ ist mein Werkzeug der Wahl. Es wird Sie immer noch nicht davon abhalten verrückt zu werden, wenn Sie HTML mit regulären Ausdrücken analysieren. – TrueWill

Antwort

0

(Unter der Annahme, .NET ...)

Dies sollte es tun:

(?s:<tr.*?>(?:.*?<td.*?>(?<content>.*?)</td>)*) 

dass extrahiert diesen Wert:

  • ID
  • personName
  • homePhone<br>officePhone
  • city
  • street

Es wird ein Spiel zurückkehren, mit einer Gruppe mit mehreren Aufnahmen.

Zum Beispiel dieser Code wird jeder Wert auf die Konsole schreiben.

var input = "<tr bgcolor='#C0C0C0'><td>ID</td>\n<td>personName</td>\n<td>homePhone\n<br>officePhone</td>\n<td>city</td>\n<td>street</td></tr>"; 
var pattern = "(?s:<tr.*?>(?:.*?<td.*?>(?<content>.*?)</td>)*)"; 

var match = Regex.Match(input, pattern); 

foreach (var capture in match.Groups["content"].Captures) 
    Console.WriteLine(capture.Value); 

Es funktioniert mit einer beliebigen Anzahl von Zellen. Es ignoriert Text, neue Zeilen und Leerzeichen zwischen den Zellen. Es ignoriert alle Attribute in der Zeile oder Zelle.

Ich benutze dieses Werkzeug mit regulären Ausdrücken für die Arbeit: http://www.radsoftware.com.au/regexdesigner/

+0

Danke. Das funktioniert großartig! Könntest du mir bitte was erklären? tut, und die Bedeutung von s: und warum nicht. *? Passe die> unmittelbar danach an? Ich kann das nirgendwo finden. – Ryan

+0

(? S: Ausdruck) ist ein Optionsmodifikator, der es in den "Einzeiligen Modus" versetzt. In diesem Modus ist das "." Zeichen entspricht allen Zeichen * einschließlich * neuer Zeilen. Das "*?" bedeutet ein faules Spiel. Das heißt, es erfasst so wenig Zeichen wie nötig. Also passt etwas wie ". *?>" Zu einem beliebigen Zeichen, bis es ein ">" trifft. –

+0

Wenn dies für Sie funktioniert, markieren Sie die Antwort als "akzeptiert". –

Verwandte Themen