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]*?
избыточно и неправильно как [.]
соответствует буквальному .
так что пользуйтесь .*?
,
*
Quantifier - сопоставляет от нуля до неограниченного количества раз, столько раз, сколько возможно, возвращая при необходимости (жадный)*?
Квантификатор - соответствует от нуля до неограниченного количества раз, насколько это возможно, с расширением по мере необходимости (ленивый)