30

我正在尝试非贪婪地解析出 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 标签的所有实例,无论是否带有参数?

4

3 回答 3

50

对于非贪婪匹配,试试这个<TD.*?>

于 2012-12-12T16:47:06.487 回答
16

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

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

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

于 2012-12-12T16:36:40.650 回答
15

来自https://regex101.com/

  • *量词 - 在零次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
  • *?量词 - 在零次和无限次之间匹配,尽可能少,根据需要扩展(惰性)
于 2018-06-11T06:12:47.817 回答