2009-07-09 2 views
0

Я должен анализировать фрагмент HTML. Это выглядит как:REGEX - Найти td с определенным классом, включая вложенные таблицы

<table> 
    <tr> 
    <td class="blabla"> <table><tr><td><table><tr><td></td></tr></table></td></tr></table> 
    </td> 
    </tr> 
    <tr> 
    <td class="blabla"> <table><tr><td></td></tr></table> 
    </td> 
    </tr> 
</table> 

Мне нужно извлечь каждый td с классом blabla, но каждый из этих клеток могут иметь 0 или более вложенные таблицы со многими вложенной ТД. Я хочу, чтобы получить

<td class="blabla"> ... many nested stuff ... </td> 

Благодарности

+0

Вы не совсем поняли, что именно вы хотите вернуть из этого – Xetius

ответ

6

Не пытайтесь анализировать HTML с регулярными выражениями. Вы не можете написать выражение, которое будет соответствовать тому, что вы хотите, потому что HTML не является регулярным.

Использование анализатора HTML/XML в библиотеке, предоставляемой вашим языком. System.Xml имеет ряд полезных классов, которые позволят вам открыть файл и запросить его с помощью XPath.

Выражение XPath вы ищете является

//td[@class="someClass"] 
+0

Не уверен в реализации .net, но это не будет // td [@ class = "someClass"] – Xetius

+0

@Xetius: Right. Сожалею. :) – Welbog

+0

Вот что мы сделали в конце. – Gidon

1

Почему бы вам не использовать CSS селекторы?

+0

Это приложение .NET win, которое анализирует текст. – Gidon

+2

@Gidon: Не думайте о HTML как текст. – Welbog

0

([Tt] [дБ] \ sclass = \ «блабла \»)

0

Вы искали бы регулярное выражение похоже на /<td\sclass=\"(.*?)\">/, но я не знаю, как сделать это в .net.

Однако из-за того, что вы можете плохо сформировать HTML, регулярное выражение не является хорошим кандидатом для синтаксического анализа. Для этого есть намного лучшие инструменты.

Как уже упоминалось, использование XPath было бы неплохим способом, используя // td [@ class = "someClass"]. Это даст вам td-узел. Затем вы можете получить его содержимое и обработать его по мере необходимости

4

Если вам нужно сделать extenisve HTML Анализа Я рекомендую использовать Html Agility Pack вместо регулярных выражений. HAP создает XML-документ с html-страницы, поэтому вы можете искать определенные узлы с помощью XPath.

0

Вы не можете сделать это, просто используя регулярные выражения, потому что это слишком сложно. Даже при использовании соответствия lookahead, регулярное выражение должно динамически меняться, потому что вам нужно будет увеличивать число </td>, которое вы ищете, исходя из того, сколько <td> найдено после того, как вы захотите.

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