2016-07-15 16 views
0

Ich bin neu in Regulärer Ausdruck :(Nach vieler Suche nach meiner Anforderung war ich in der Lage get Antwort zu verwalten, aber ich tue zusätzliche Ergebnisse erhalten, wie weiter unten erläuterte:Regex C# HTML-Tags mit bestimmtem Attribute

My String

<td valign="top" width="100%"> 
<td width="100%" valign="top"> 
<td valign="top" height="100%" width="100%"> 
<td valign="top"> 

Meine Expression

/<td (?=.*valign="top")(?=.*width="100%").*>/gm 

Mein Ergebnis

<td valign="top" width="100%"> 
<td width="100%" valign="top"> 
<td valign="top" height="100%" width="100%"> 

Erwartetes Ergebnis

<td valign="top" width="100%"> 
<td width="100%" valign="top"> 

Fazit: Ich mag TD-Tag extrahieren, die nur mit bestimmtem Wert valign und width-Attribut hat.

Hinweis: Ich muss viele Datendateien analysieren, daher verlangsamt HTMLAgility den gesamten Prozess.

Bitte führen Sie mich zum endgültigen Ausdruck. Prost

+0

Mögliche Duplikate von [Regex, um Attributwert zu extrahieren] (http://stackoverflow.com/questions/5526094/regex-to-extract-attribute-value) – horHAY

+2

Ich wäre nicht so sicher über * HTMLAgility wird insgesamt verlangsamen * Wenn Sie * viele Datendateien analysieren müssen *. Nun, es ist deine Entscheidung, ich würde mit HtmlAgilityPack gehen. –

Antwort

0

Dies scheint für mich, es zu tun werden:

\<td\s+((valign="top"\s+width="100%")|(width="100%"\s+valign="top"))\s*>\gm 

Ihr Ausdruck, wenn die beiden Attribute beginnend irgendwo vor dem <td sind zu sehen sucht. Diese Option ermöglicht Whitespace und sucht dann nach valign="top" width="100%" oder width="100%" valign="top", gefolgt von weiteren optionalen Leerzeichen vor dem Ende des td-Tags. Dies verbietet alle Attribute außer den Attributen width und valign.

Mit diesem gesagt, gibt es immer unerwartete Situationen bei der Verwendung von Regex. Sie können Ihre Regex-Ausdrücke hier in Echtzeit testen: http://regexr.com/ Geben Sie einfach Ihre Zeichenfolge und den Regex-Ausdruck ein, um zu sehen, was sie auswählt.

EDIT:

Wenn Sie sowohl einzelne und doppelte Anführungszeichen um die Attribute berücksichtigen wollen, versuchen Sie dieses:

\<td\s+((valign=([",'])top\3\s+width=([",'])100%\4)|(width=([",'])100%\6\s+valign=([",'])top\7))\s*>\gm 

nun entweder für einen "oder" an die ich erlaubt Beginnen Sie mit dem Wert des Attributs und suchen Sie nach einer Übereinstimmung, die am Ende des Werts des Attributs gefunden wurde

Noch einmal, ich ermutige Sie, auf die oben verlinkte Website zu gehen und mit diesen selbst zu spielen. Ich benutze fast nie Regex, aber wenn ich es tue kann normalerweise einen Ausdruck finden, der für mich mit dieser Website funktioniert.

+0

Danke Matt ... Du antwortst genügen meine Anforderung ... Prost – Divyesh