文档格式如下<!**********!> 文件头,可有可无
//***********注释行
<xml:tag id=**>
****************
</xml:tag>//***********注释行
<xml:tag id=**>
****************
</xml:tag>如何用正则表达式校验这种类似xml的格式啊,并提取
//***********注释行

<xml:tag id=**>
****************
</xml:tag> 这两部分内容啊?救命啊!!!

解决方案 »

  1.   

    获取注释行:
    string regex1="//.*";获取TAG
    string regex2="<xml:tag id=[^>]*>[\\s\\S]*?</xml:tag>";
      

  2.   


    using System.Text.RegularExpressions;Regex regex = new Regex(
        @"//.*",
        RegexOptions.IgnoreCase
        | RegexOptions.Multiline
        );Regex regex = new Regex(
        @"<xml:tag id=[^>]*>.*?</xml:tag>",
        RegexOptions.IgnoreCase
        | RegexOptions.Singleline
        );
      

  3.   

    <xml:tag id=**>
    ****************
    </xml:tag>   string str = "//***********注释行1<xml:tag id=asdf>asdfsa1111</xml:tag> //***********注释行2这两部分内容啊?<xml:tag id=as>asdfsa2222</xml:tag>";
            string pattern = "//((?:(?!<xml:tag id=).)+)[\\s]*<xml:tag id=[^>]+>[\\s]*((?:(?!</xml:tag>).)+)[\\s]*</xml:tag>"; 
                System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(pattern );
               System.Text.RegularExpressions.MatchCollection mc = r.Matches(str);
              if(mc!= null && mc.Count > 0 ){
                  System.Collections.Generic.List<string> list1 = new System.Collections.Generic.List<string>();
                  System.Collections.Generic.List<string> list2 = new System.Collections.Generic.List<string>();
                  foreach (System.Text.RegularExpressions.Match m in mc)
                  {
                   System.Text.RegularExpressions.GroupCollection gc = m.Groups;
                    if(gc!= null && gc.Count > 2 )
                    {
                       
                            list1.Add(gc[1].Value);
                             list2.Add(gc[2].Value);
                    }
                  } 
              }
      

  4.   

    try...            Regex reg = new Regex(@"(?is)(?<=^|\n)(//[^\n]+)\n(<xml:[^>]*>.*?</xml:tag>)");
                MatchCollection mc = reg.Matches(yourStr);
                foreach (Match m in mc)
                {
                    richTextBox2.Text += m.Groups[1].Value + "\n-------------------------\n";
                    richTextBox2.Text += m.Groups[2].Value + "\n=========================\n";
                }
      

  5.   


    过客:
    (?is)(?<=^|\n)(//[^\n]+)\n(<xml:[^>]*>.*?</xml:tag>)
    中^|\n怎么解释啊
      

  6.   


    谢谢你啦。
    好像能够取出标签的内容,但是不能校验格式啊其次我说的<xml:tag id=*>只是一个例子,也有可能是其他的
    比如<asp:treeview> 那么怎么在正则表达式里面去匹配首尾标签呢
    谢谢啊
      

  7.   

    5楼哪里不符合要求?现在改成可匹配任意标签的            Regex reg = new Regex(@"(?is)(?<=^|\n)(//[^\n]+)\n(<(\S+)[^>]*>.*?</\3>)");
                MatchCollection mc = reg.Matches(yourStr);
                foreach (Match m in mc)
                {
                    richTextBox2.Text += m.Groups[1].Value + "\n-------------------------\n";
                    richTextBox2.Text += m.Groups[2].Value + "\n=========================\n";
                }
      

  8.   


    好像大家都理解错了
    再举个例子
    <!--文件头--!>
    //这是一个注释行
    <测试1::csdn url=bbs>
    这是我经常上的bbs论坛
    </测试1::csdn>//这还是一个注释行
    <测试2::cnblog name=博客>
    也是一个学习的好地方
    </测试2::cnblog>//最后一个例子
    <换个名字::sina class=新闻>
    看看新闻吧
    </换个名字::sina>我需要做的是
    首先校验文本内容的格式,这里有点类似XML格式(标签内的文本内容不存在<或>这两种字符),假设如下
    <测试::csdn name=博客>
    也是一个学习的好地方
    </测试::cnblog>或者<测试::cnblog name=博客>
    也是一个学习的好地方
    </测试::cnblog>> 能够判断结构不正确其次我要求能够获取以下内容
    1. 测试1::csdn url=bbs (标签属性)
        这是我经常上的bbs论坛 (标签文本内容)
        这是一个注释行(注释行)2. 测试2::cnblog name=博客
        也是一个学习的好地方
        这还是一个注释行
       
    3.换个名字::sina class=新闻
       看看新闻吧
       最后一个例子
      

  9.   


    其实主要是保证从开头匹配注释行,这个要看需求了,如果不一定非是从行首开始,可以去掉(?<=^|\n)这一限制
      

  10.   


    你提供的两个正则表达式好像都没有正确获取数据啊
    我还是直接用hch126163的字符串
    string str = "//***********注释行1<xml:tag id=asdf>asdfsa1111</xml:tag> //***********注释行2这两部分内容啊?<xml:tag id=as>asdfsa2222</xml:tag>";
      

  11.   


    你这里都没换行,全都是注释,怎么可能有匹配
                string str = "//***********注释行1\n<xml:tag id=asdf>\nasdfsa1111\n</xml:tag> \n//***********注释行2这两部分内容啊?\n<xml:tag id=as>\nasdfsa2222\n</xml:tag>";
                Regex reg = new Regex(@"(?is)(?<=^|\n)(//[^\n]+)\n(<(\S+)[^>]*>.*?</\3>)");
                MatchCollection mc = reg.Matches(str);
                foreach (Match m in mc)
                {
                    richTextBox2.Text += m.Groups[1].Value + "\n-------------------------\n";
                    richTextBox2.Text += m.Groups[2].Value + "\n=========================\n";
                }
      

  12.   


    嗯,能正确取出数据,但是还是不能校验结构 string str = "<!--文件头--!>\r\n//这是一个注释行\r\n<<测试11::csdn url=bbs>\r\n这是我经常上的bbs论坛\r\n</测试1::csdn>\r\n//这还是一个注释行\r\n<测试2::cnblog name=博客>\r\n也是一个学习的好地方\r\n</测试2::cnblog>\r\n//最后一个例子\r\n<换个名字::sina class=新闻>\r\n看看新闻吧\r\n</换个名字::sina>";不能判断文件结构不正确
      

  13.   


    非常感谢你的blog,看了一天了,见笑了。以前没有深入用过