2011-02-04 3 views
0

Я хочу извлечь все строки таблицы из HTML-страницы. Но с использованием рисунка @"<tr>([\w\W]*)</tr>" не работает. Это дает один результат, который является первым вхождением <tr> в последнее появление </tr>. Но я хочу, чтобы каждое вхождение значения <tr>...</tr>. Может ли кто-нибудь сказать мне, как я могу это сделать?C# Regex Problem

ответ

2

Я согласен с Отметкой: вы должны использовать библиотеку HTML Agility Pack.

О своем регулярном выражении, вы должны идти с чем-то вроде:

@"<tr>([\s\S]*?)</tr>" 

Это не жадный шаблон, и вы должны получить один матч для каждого TR.

+0

Отличный ... много спасибо. Именно это я и хотел. .. – Barun

+0

Другой вопрос ... Можете ли вы предоставить мне любую ссылку или название книги, где я могу правильно изучить это свойство регулярного выражения [C#]? – Barun

+0

@Barun, попробуйте следующее: http://www.regular-expressions.info/tutorial.html –

5

[\w\W]* соответствует greedily следовательно будет соответствовать от первого <tr> до последних </tr>.

Подход регулярного выражения не будет работать хорошо, потому что HTML не является обычным языком. Если вы действительно хотели попробовать использовать ленивый модификатор, такой как "<tr>(.*?)</tr>" с флагом RegexOptions.Singleline, однако это не гарантирует работу во всех случаях.

Для анализа HTML вам нужен парсер HTML. Попробуйте HTML Agility Pack.

+1

Можете ли вы предоставить мне несколько кодов C# для этого, пожалуйста, – Barun

+2

И все мы знаем, что происходит, когда вы пытаетесь разобрать html с регулярным выражением ... http://stackoverflow.com/questions/1732348/regex-match-open- Теги-except-xhtml-self-contains-tags/1732454 # 1732454 –

+0

Другой вопрос, так или иначе, чтобы я мог сделать это с помощью регулярного выражения? – Barun