当前位置:编程学习 > C#/ASP.NET >>

写一个函数通过正则表达式,将需要的结果提取到一个datatable表中

小弟写了一个函数通过正则表达式,将需要的结果提取到一个datatable表中,步骤如下:
1.新建一个表;
2.通过正则表达式提取表所需的列名,给表添加列;
3.通过正式表达式提取表的列值,给表添加行;

现在步骤1,2都可以正常通过测试,而步骤3测试过程中发现提取出来的值都是空值,这结果是不正确的。

还有就是正则表达式我通过用RegexTester.exe来测试,是能正常提取出我要的结果的。

大家帮忙看看我哪个步骤有误!谢谢了!


public DataTable FilterFile(string FileName, string RegField, string RegOrder)
{

            ///新建表DT,并添加字段名;
            ///      
            DataTable DT = new DataTable();
            Regex re = new Regex(RegField, RegexOptions.IgnoreCase);//设定查找Field的Regex值
            MatchCollection mc = re.Matches(RegOrder); //设定要查找的字符串

            foreach (Match m in mc)
            {
                DT.Columns.Add(m.Groups[0].Value);
                // Debug.Print(m.Groups[0].Value);
            }
            

            StreamReader sr = new StreamReader(FileName);
            re = new Regex(RegOrder, RegexOptions.IgnoreCase);
            mc = re.Matches(sr.ReadToEnd()); //设定要查找的字符串

            foreach (Match sm in mc)
            {

                DataRow DR = DT.NewRow();

                for (int i = 0; i < DT.Columns.Count; i++)
                {
                    DR[i] = sm.Groups[DT.Columns[i].ColumnName.ToString()].Value;
                }

                DT.Rows.Add(DR);

                //Debug.Print(sm.Groups[1].Value);
                //Debug.Print(sm.Groups[2].Value);
                //Debug.Print(sm.Groups[3].Value);
                //Debug.Print(sm.Groups[4].Value);
                //Debug.Print(sm.Groups[5].Value);
                //Debug.Print(sm.Groups[6].Value);
                //Debug.Print(sm.Groups[7].Value);


            }

            sr.Close();


            ///测试输出
            //Debug.Print(DT.TableName.ToString());   
            //for(int j=0;j<DT.Columns.Count;j++)
            //{
            //    Debug.Print(DT.Columns[j].ColumnName.ToString());
            //   
            //}

            //for (int i = 0; i < DT.Rows.Count; i++)
            //{
            //    for(int j=0;j< DT.Columns.Count;j++)
            //    {

            //        Debug.Print(DT.Rows[i].ItemArray[j].ToString());
            //    }
            //}
            
            return DT;
           
        }


--------------------编程问答-------------------- 你调试一下,一般这样的问题可能就是大意造成的 --------------------编程问答-------------------- StreamReader sr = new System.IO.StreamReader(FileName, System.Text.Encoding.UTF8);
可能是编码的问题,你试下各种编码 --------------------编程问答-------------------- 晕,就是找不出哪里有误。有些抓狂!!!!! --------------------编程问答-------------------- 把这个贴出来看看RegOrder,一般是C#下的引擎不一致引起的。 --------------------编程问答-------------------- sql 语句就可获取所有列名
单步跟踪调试 --------------------编程问答-------------------- 谢谢LS的;
我的正则表达式如下:
(?<id>\d{7})(?=</td><td)|(?<=>  )(?<bookname>\S+)(?=</td><td)|(?<=>)(?<uint>\D{1})(?=</td><td)|(?<=>)(?<num>\d{1,5})(?=</td><td)
提取出的数据出的结果如下:
1013625
中国皇帝传(全二册)

4
1013626
中华成语故事(全2册)

4

我想得到这样的结果应该如何改写:
1013625中国皇帝传(全二册)本4
1013626中华成语故事(全2册)本4

--------------------编程问答-------------------- 我的正则表达式如下:
(?<id>\d{7})(?=</td><td)|(?<=>  )(?<bookname>\S+)(?=</td><td)|(?<=>)(?<uint>\D{1})(?=</td><td)|(?<=>)(?<num>\d{1,5})(?=</td><td)
提取出的数据出的结果如下:
MATCH[0]:1013625
MATCH[1]:中国皇帝传(全二册)
MATCH[2]:本
MATCH[3]:4
MATCH[4]:1013626
MATCH[5]:中华成语故事(全2册)
MATCH[6]:本
MATCH[7]:4

我想得到这样的结果应该如何改写:
MATCH[0]:1013625中国皇帝传(全二册)本4
MATCH[1]:1013626中华成语故事(全2册)本4 --------------------编程问答--------------------

RegOrder如下:
(?<id>\d{7})(?=</td><td)|(?<=>  )(?<bookname>\S+)(?=</td><td)|(?<=>)(?<uint>\D{1})(?=</td><td)|(?<=>)(?<num>\d{1,5})(?=</td><td)


file内容如下:


<HTML>
  <HEAD>
    <STYLE>
     TD                {font-size:10pt; font-family:arial}
    </STYLE>
  </HEAD>
  <TITLE>订单打印</TITLE>
  <BODY topmargin="2" bgcolor=FFFDFF>
    <BR>
<TABLE width=100% CELLSPACING=0 CELLPADDING=0><TR><TD width=40% align=left><IMG src='./gif/drf.gif'></TD><TD width=60% align=left><b><font size='6'>商 品 订 购 单</font></b></TD></TR></TABLE><BR><TABLE width='100%' align='center' bordercolor=black border='2' CELLSPACING=0 CELLPADDING=0 ><TR height=20><TD width='50%' align='left'> <font color =black>订货日期: 2010-08-09<TD width='50%' align='left'> <font color =black>订单号码: 3.221514</TR><TR height=20><TD width='50%' align='left'> <font color =black>交货日期: 2010-08-18<TD width='50%' align='left'> <font color =black>快     报: </TR><TR height=30><TD width='50%' align='left'> <font color =black><TD width='50%' align='left'> <font color =black>备     注:   </TR></TABLE>     <TABLE width=100% align=center bordercolor=black border=3 >
       <TR> 
        <TD width=50% valign=top>
         <TABLE width=100% align=center cellspacing=0 cellpadding=0> 
          <TH colspan=4 bgcolor="silver"> 交货地点 : 
           <B>东环店    </B>
            </TH>
           <TR height=23><TD> 地址: 江苏省苏州市东环路1500号现代</TD></TR>
           <TR height=23><TD>     大道与东环路交叉口</TD></TR>
           <TR height=23><TD> 预约电话: 0512-67168168*518-518</TD></TR>
           <TR height=23><TD> 传真: 0512-67168006</TD></TR>
           <TR bgcolor="black" height=1><TD colspan=4></TD></TR>
         </TABLE>
        </TD> 
        <TD width=50% valign=top>
          <TABLE width=100% align=center cellspacing=0 cellpadding=0>
            <TH colspan=4  bgcolor="silver"> 厂商名称 :
             <B>厦门久全文化传播有限公司(53064)    </B>
            </TH>
           <TR height=23><TD> 地址: 思明区湖滨东路319号A幢第二层之</TD></TR>
           <TR height=23><TD>     一</TD></TR>
           <TR height=23><TD> 电话: 0592-5060828</TD></TR>
           <TR height=23><TD> 传真: 0592-5327735</TD></TR>
           <TR bgcolor="black" height=1><TD colspan=4></TD></TR>
          </TABLE>
         </TD>
        </TR>
      </TABLE>
<TABLE width='100%' align='center' bordercolor=black border=2 CELLSPACING=0 CELLPADDING=0 ><TD><TABLE width=100% CELLSPACING=0 CELLPADDING=0><TABLE width='100%' align='center' bordercolor= border=2 CELLSPACING=0 CELLPADDING=0 > 
       <TR height=30>
       <TD align='center' bgcolor=silver>条 码</TD>
       <TD align='center' bgcolor=silver>货 号</TD>
       <TD align='center' bgcolor=silver>品 名 / 规 格</TD>
       <TD align='center' bgcolor=silver>订购单位</TD>
       <TD align='center' bgcolor=silver>订 购 量</TD>
       <TD align='center' bgcolor=silver>实送数量</TD> 
       <TD align='center' bgcolor=silver>备     注</strong></TD> 
       </TR>
       <tr><td colspan=7> </td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013625</td><td align='left'width='38%' bgcolor=silver>  中国皇帝传(全二册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013789</td><td align='left'width='38%' bgcolor=silver>  中华成语故事(全2册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013942</td><td align='left'width='38%' bgcolor=silver>  白话聊斋(全二册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013952</td><td align='left'width='38%' bgcolor=silver>  史记.列传(全2册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013953</td><td align='left'width='38%' bgcolor=silver>  史记.世家(全2册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013966</td><td align='left'width='38%' bgcolor=silver>  史记.本纪(全2册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013972</td><td align='left'width='38%' bgcolor=silver>  中国宰相传(全二册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013973</td><td align='left'width='38%' bgcolor=silver>  中国将帅传(全二册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
        <tr><td width='12%' bgcolor=silver> </td><td align='center' width='6%' bgcolor=silver>1013977</td><td align='left'width='38%' bgcolor=silver>  中国通史故事(全2册)</td><td align='center' width='10%' bgcolor=silver>本</td><td align='center' width='10%' bgcolor=silver>4</td><td align='center' width='12%' bgcolor=silver></td><td align='center' width='12%' bgcolor=silver></td></tr><tr><td> </td><td> </td><td colspan=4>  三秦</td></tr>
       <tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr><tr><td colspan=7> </td></tr></TABLE></TD></TABLE><TR><TD>*自06年3月份起,本公司华东地区每月支付货款一次,付款日为20号*</TR></TD>    <HR>
    <TABLE width="100%">
      <TR>
        <TD width="50%">
        </TD>
        <TD width="50%" align="right">
          <P STYLE="color:black"><BR>
          RT-MART Limited Shanghai 2005 ©<BR>
          All rights reserved.</P>
        </TD>
      </TR>
    </TABLE>
</BODY>
</HTML>


--------------------编程问答-------------------- 休息下先,再慢慢检查下应该就能看出来
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,