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"

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

3 ответа

Решение

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

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

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

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

С https://regex101.com/

  • * Quantifier - сопоставляет от нуля до неограниченного количества раз, столько раз, сколько возможно, возвращая при необходимости (жадный)
  • *? Квантификатор - соответствует от нуля до неограниченного количества раз, насколько это возможно, с расширением по мере необходимости (ленивый)
Другие вопросы по тегам