<B_DOC ID="国际新闻"></B_DOC>
<B_TIT>88888</B_TIT>我该如何写正则匹配.取得<>中的值(也就是B_DOC或者B_TIT) 属性的值(ID值)
还有中间的值(88888)

解决方案 »

  1.   

    楼主用DOM方法解决不就可以了,为什么一定要用正则
      

  2.   

    因为我读的是一个HTML模板呀
      

  3.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title></title>
    </head>
    <body><table width="766" border="0" cellspacing="0" cellpadding="0">  <tr>
      <td width="300" height="26" class="nav">
              <BBB_Curpage VALUE=">>" ONLY="false" AUTOLINK="true" TARGET="_blank">当前位置</BBB_Curpage>
      </td>
                    
      </tr>
      <tr> 
          <td height="30" class="contentTitle">
               <BBB_Document FIELD="TITLE"  DATEFORMAT="false" AUTOFORMATTYPE="HTML">文档详细信息</BBB_Document>
          </td>
      </tr>
      <tr> 
          <td valign="top"> 
                  <BBB_COLUMN id=DOCPUBTIME>发布时间</BBB_COLUMN>
          </td>
      </tr>
      <tr> 
          <td valign="top">
                  <BBB_Document FIELD="DOCCON" AUTOFORMATTYPE="HTML">正文</BBB_Document>
          </td>
    </TABLE>
    </body>
    </html>想这样的HTML模板.其中的 <BBB_Document .....></BBB_Document>之类的是我自己定义的标签.
    这样的模板可以用DOM读取吗????
    "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">"这段存在也可以用DOM来读??
      

  4.   

    string yourStr = ......;
    MatchCollection mc = Regex.Matches(yourStr, "<b_doc\\s+id=\"(?<id>.+?)\">\\s*</b_doc>\\s*<b_tit>(?<title>.+?)</b_tit>", RegexOptions.IgnoreCase);
    foreach(Match m in mc)
    {
        m.Groups["id"].Value;
        m.Groups["title"].Value;
    }
      

  5.   

    <B_Documents ID="热点新闻"  NUMBER="20" >
        <B_Document FIELD="TITLE" >热点新闻</B_Document></td>
    </B_Documents>
    --------------------------------------------------------------
    <B_Documents ID="热点新闻"  NUMBER="20" >
    代表取热点新闻的20条记录,它里面的<B_Document FIELD="TITLE" >代表取TITLE这个字段(标题)的值 .
    我取出20 ,然后肯定是select top(10) TITLE from ...... 
    象这样的模板.我取的值有: ID,NUMBER,FIELD  这样子该如何取??
      

  6.   

    using System;
    using System.Text.RegularExpressions;public class MyClass
    {
        public static void Main()
        {
            string yourStr = @"<B_Documents ID=""热点新闻""  NUMBER=""20"" >
        <B_Document FIELD=""TITLE"" >热点新闻</B_Document></td>
    </B_Documents>";
            //拼SQL语句用的模版
            string templeteStr = "select top {0} {1} from {2}";        Match m = Regex.Match(yourStr, "<b_documents\\s+id=\"(?<id>.+?)\"\\s+number=\"(?<number>.+?)\"\\s+>\\s*<b_document\\s+field=\"(?<field>.+?)\"\\s+>.+?</b_document>\\s*</td>\\s*</b_documents>", RegexOptions.IgnoreCase);        string id = m.Groups["id"].Value;
            string number = m.Groups["number"].Value;
            string field = m.Groups["field"].Value;        //如果必须的三部分的长度中有一个为0
            if(id.Length == 0 || number.Length == 0 || field.Length == 0)
            {
                Console.WriteLine("没有匹配的项。");
                return;
            }
            string tempStr = String.Format(templeteStr, number, field, id);
            Console.WriteLine(tempStr);
            Console.ReadLine();
        }
    }
      

  7.   

    首先非常感谢mobydick(敌伯威|我排著队拿著爱的号码牌) 
    -----------------
    我现在的新问题是 在<b_document id="",type="".....>这样的标签中有很多属性 id,type,name,filed.等
    我读取模板的时候,如果没有指定type属性,那么就取得默认值,指定的话就取赋的值
    这样就导致了一个结果.我写一号模板时候 <b_document id="国际新闻">
                         我写二号模板时候<b_document id="热点新闻",num=10,type=0>
    也就是说同样的标签,但指定的属性不同.这样的话我在后台如何定义匹配的正则式?
    从而实现 不管啥样的模板 就用同样的方法来获取<b_document>标签中的所有属性
    请问如何解决?如何匹配?