Regex Non-Greedy

Я пытаюсь безжалостно разобрать теги TD. Я начинаю с чего-то вроде этого:

<TD>stuff<TD align="right">More stuff<TD align="right>Other stuff<TD>things<TD>more things

Я использую следующее как мое регулярное выражение:

Regex.Split(tempS, @"\<TD[.\s]*?\>");

Записи возвращаются как показано ниже:

""
"stuff<TD align="right">More stuff<TD align="right>Other stuff"
"things"
"more things"

Почему он не разбивает этот первый полный результат (тот, который начинается с "stuff" )? Как настроить регулярное выражение для разделения на все экземпляры TD-тега с параметрами или без них?

Ответ 1

Вы хотите регулярное выражение <TD[^>]*>:

<     # Match opening tag
TD    # Followed by TD
[^>]* # Followed by anything not a > (zero or more)
>     # Closing tag

Примечание: . соответствует чему-либо (включая пробелы), поэтому [.\s]*? является избыточным и неправильным, так как [.] соответствует литералу ., поэтому используйте .*?.

Ответ 2

Для не жадного соответствия попробуйте <TD.*?>