字符串中包含html,要求能匹配所有非链接(非<>)的部分.
如:“<p>工业<a href="#">自动化</a>专业课程安排如图2<img src="#" alt="工业自动化"/>,如有变动,另行通知!<span><a href="#">机电学院</a></span>考试课成绩>80分的学生可选修第二专业。</p>”
期待匹配的结果是:<p>工业
专业课程安排如图2
,如有变动,另行通知!<span>
</span>考试课成绩>80分的学生可选修第二专业。其中大于号(>)可能会干扰正则表达式对围堵标记(<>)的识别。

解决方案 »

  1.   

    try:
    (?is)<(a|img)[^]*?>(.*?</\1>)?string source="你的html源码";
    source=source.Replace(source,@"(?is)<(a|img)[^]*?>(.*?</\1>)?","");
      

  2.   

    谢谢Chinajiyong ,正则有点问题,
    提示:正在分析“(?is)<(a|img)[^]*?>(.*?</\1>)?”- 未终止的 [] 集
      

  3.   

     string str = File.ReadAllText("D:\\1.txt", Encoding.Default);
                str = Regex.Replace(str, @"(?is)<a[^>]*>.*?</a>|<img[^>]+>", "\r\n"); 
               
      

  4.   

    谢谢hjywyj,匹配a标签和img标签很管用,如何转换成匹配非a标签和img标签呢?
      

  5.   


    string source="你的html源码";
    source=source.Replace(source,@"(?is)<(a|img)[^>]*?>(.*?</\1>)?","");
      

  6.   

    匹配a标签和img标签很管用,如何转换成匹配非a标签和img标签的正则呢?
      

  7.   

    有个参考的正则可以基本满足条件:(?in)[^<>]+(?=(<(?!/a)[^<>]*>[^<>]*)*(<a\b|$))
    就是有个缺陷,遇到字符串中有大于号(>)或者小于号(<)就会出错。