正则表达式非贪婪(懒惰)(Regex Non-Greedy (Lazy))

2019-07-05 01:46发布

我试图非贪婪地解析出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标签的所有实例分裂?

Answer 1:

你想要的正则表达式是<TD[^>]*>

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

注: . 匹配任何内容(包括空格),所以[.\s]*? 是多余的,错误的,因为[.]匹配的文字. 所以使用.*?



Answer 2:

对于非贪婪的比赛,试试这个<TD.*?>



Answer 3:

从https://regex101.com/

  • *量词-零和无限的时间之间的较量,多次,尽可能需要回馈(贪婪)
  • *? 量词-匹配零和无限倍之间, 如几次尽可能 ,扩大根据需要(懒惰)


文章来源: Regex Non-Greedy (Lazy)