日期:2014-05-19  浏览次数:20880 次

求抽取HTML正文正则表达式
字符串如下
<html>
    <p> It   is   test </p>
    <p> abc </p>
    <p>           </p>
    <p>          

              </p>
</html>

需要抽取前两行。
我写表达式如下                
Regex   regex   =   new   Regex   (@ " <[^/> ]+> [^ <> /]+[a-zA-Z,\.]+ </[^> ]+> ");
不知道怎么才能判断中间可以有   “\s”   但必须包含字母。

也就是中间的部分可以包括字母和空格以及任何看不见的字符(\s)。但不能只包含看不见的字符(\s)


多谢各位老大!

------解决方案--------------------
用正向预搜索(?!\s+ <)

<[^> ]*?> (?!\s+ <)([^ <]*?) <[^> ]*?>
------解决方案--------------------
如果 <p> </p> 也不是你想要的,那就应该是(?!\s* <)

正向预搜索: "(?!xxxxx) "

格式: "(?!xxxxx) ",在被匹配的字符串中,它对所处的 "缝隙 " 或者 "两头 " 附加的条件是:所在缝隙的右侧,必须不能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似 "\b ",本身不匹配任何字符。 "\b " 只是将所在缝隙之前、之后的字符取来进行了一下判断,不会影响后边的表达式来真正的匹配。

> (?!\s* <)
表示在“> ”的右侧,下一个 " < "之前,不能是空格,制表符等空白符号

<[^> ]*?> (?!\s* <)([^ <]*?) <[^> ]*?>