Regex Non-Greedy (Lazy)

戏子无情 提交于 2019-11-27 03:56:37

问题


I'm attempting to non-greedily parse out TD tags. I'm starting with something like this:

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

I'm using the below as my regex:

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

The records return as below:

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

Why is it not splitting that first full result (the one starting with "stuff")? How can I adjust the regex to split on all instances of the TD tag with or without parameters?


回答1:


The regex you want is <TD[^>]*>:

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

Note: . matches anything (including whitespace) so [.\s]*? is redundant and wrong as [.] matches a literal . so use .*?.




回答2:


For non greedy match, try this <TD.*?>




回答3:


From https://regex101.com/

  • * Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
  • *? Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)


来源:https://stackoverflow.com/questions/13844168/regex-non-greedy-lazy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!