Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式非贪婪(懒惰)_C#_Regex_Html Table_Non Greedy - Fatal编程技术网

C# 正则表达式非贪婪(懒惰)

C# 正则表达式非贪婪(懒惰),c#,regex,html-table,non-greedy,C#,Regex,Html Table,Non Greedy,我正在尝试非贪婪地解析TD标签。我从以下内容开始: <TD>stuff<TD align="right">More stuff<TD align="right>Other stuff<TD>things<TD>more things stuffMore stuff您想要的正则表达式是]*>: < # Match opening tag TD # Followed by TD [^>]* # Followed

我正在尝试非贪婪地解析TD标签。我从以下内容开始:

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

stuffMore stuff您想要的正则表达式是
]*>

<     # Match opening tag
TD    # Followed by TD
[^>]* # Followed by anything not a > (zero or more)
>     # Closing tag
<#匹配开头标签
TD#后接TD
[^>]*#后跟任何非a>(零或更多)
>#结束标记

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

对于非贪婪匹配,请从

  • *
    量词-零次和无限次之间的匹配,尽可能多 尽可能多次,根据需要回馈(贪婪)
  • *?
    量词-在零次和无限次之间进行匹配,尽可能少地进行匹配,根据需要进行扩展(惰性)

请参见
仅表示字符类
[.]
中的文字点,而不是“任何字符”。使用
[^>]*
可能会更成功,但它会破坏属性中的
(这就是为什么我们经常使用解析器而不是正则表达式来处理html和xml的原因之一)。@Wrikken这里的html是相当静态的。没有太多的变化,我知道正则表达式将为它工作。因此,我没有选择解析器的路线。有没有一种方法可以让你成功。字符是指包括空格在内的“任何字符”?我不知道如何使用c#修饰符(在pcre中是
/s
)使点匹配所有字符。但是,
[^>]*>
在功能上等同于
(.|\s)*?>
,并且在正则表达式上可能更容易。默认情况下。不匹配新行,但\s匹配。@Hambone,因为量词
*
后的
告诉正则表达式引擎在找到
后面表达式的第一个匹配项时停止使用符号,即-
。这是因为贪婪与非贪婪的区别
*
""
"stuff<TD align="right">More stuff<TD align="right>Other stuff"
"things"
"more things"
<     # Match opening tag
TD    # Followed by TD
[^>]* # Followed by anything not a > (zero or more)
>     # Closing tag