2016-07-15 2 views
0

Я новичок в регулярных выражений :(После многих поисков моего требования я был в состоянии управлять получить ответ, но я действительно получить дополнительные результаты, как описано ниже:Regex C# HTML теги с определенным атрибутом

Моя Струнный

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

Мой Экспрессия

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

Мой результат

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

Ожидаемый результат

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

Заключение: Я хочу, чтобы извлечь TD тег, который имеет VALIGN и ширину атрибут только с определенным значением.

Примечание: Мне нужно проанализировать множество файлов данных, поэтому HTMLAgility замедлит общий процесс.

Просьба направлять меня к окончательному выражению. Приветствия

+0

Возможный дубликат [Regex для извлечения значения атрибута] (http://stackoverflow.com/questions/5526094/regex-to-extract-attribute-value) – horHAY

+2

Я бы не был так уверен в * HTMLAgility будет замедляться в целом процесс *, если вы * должны разбирать много файлов данных *. Ну, это ваш выбор, я бы пошел с HtmlAgilityPack. –

ответ

0

Это, кажется, делает это для меня:

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

Ваше выражение ищет, чтобы увидеть, если два атрибута находятся где-то впереди <td начала. Это разрешает пробелы, затем ищет либо valign="top" width="100%", либо width="100%" valign="top", а затем дополнительные необязательные пробелы перед тегом td. Это запрещает все атрибуты, кроме атрибутов width и valign.

С учетом сказанного всегда возникают непредвиденные ситуации при использовании регулярного выражения. Вы можете тестировать выражения регулярного выражения в режиме реального времени здесь: http://regexr.com/ Просто введите строку и выражение регулярных выражений, чтобы увидеть, что он выбирает.

EDIT:

Если вы хотите, чтобы учесть как одиночные и двойные кавычки вокруг атрибутов, попробуйте это один:

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

Теперь я позволяю либо "или" на начало значения атрибута и поиск соответствия того, что было найдено в конце значения атрибута.

Опять же, я призываю вас перейти на сайт, который я связал выше, и поиграть с ними самим. Я почти никогда не использую регулярное выражение, но когда я делаю это обычно может найти выражение, которое работает для меня с этим сайтом.

+0

Спасибо, Мэтт ... Ты отвечаешь на мое требование ... Приветствия – Divyesh

Смежные вопросы