string str = "2005/03--2006/11:肇航科技有限公司\r\n所属行业:计算机软件 \r\n软件部 高级软件工程师 \r\njava高级高级软件工程师\r\n\r\n\r\n\r\n2004/07--2005/02:昌盛电脑工作室\r\n所属行业:文字媒体/出版 \r\n设计部 平面设计 \r\n平面设计,"字符串如上面所述,我要分别取出 起始时间,公司名称(后面可能是2个以上的公司),所属行业,和后面的描述请各位帮忙实现下,小弟感激不尽,谢谢

解决方案 »

  1.   

    //对整体进行拆分
    int num = str.indexOf('\r\n\r\n\r\n\r\n');//这里的区分符号('\r\n\r\n\r\n\r\n')根据你的字符串决定,这种方法不是万能的。
    string strPart1 = substring('str',0,num1); 
    string strPart2 = substring('str',num1);//對第一段進行截取
    int numStart = strPart1.indexOf(':');//起始位置
    int numEnd = strPart1.indexOf('\r\n');//中止位置
    string companyName1 = substring(strPart1,numStart,numEnd-numStart);//截取string companyName2 =...//類似上边的方法
      

  2.   

      string str = "2005/03--2006/11:肇航科技有限公司\r\n所属行业:计算机软件 \r\n软件部 高级软件工程师 \r\njava高级高级软件工程师\r\n\r\n\r\n\r\n2004/07--2005/02:昌盛电脑工作室\r\n所属行业:文字媒体/出版 \r\n设计部 平面设计 \r\n平面设计,";
                Regex reg = new Regex(@"(\S+)--(\S+):([\s\S]*?)所属行业:([\s\S]*)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
                MatchCollection ms = reg.Matches(str);
                foreach(Match m in ms)
                {
                    Response.Write("开始日期:"+m.Result("$1"));
                    Response.Write("结束日期:" + m.Result("$2"));
                    Response.Write("公司:"+m.Result("$3"));
                    Response.Write("行业:"+m.Result("$4"));
                    Response.Write("<BR>");
                }
      

  3.   

    补充:方法是这样的,不过对数值的准确性没有调试,你可以打断点自己把int型的数据作一些加减(可能会加1或者减1)。
    在对第二个进行截取的时候,起始位置不是num,应该是num加上区分符号自身的长度。
      

  4.   

    hyunwung 
    ------------------------
    谢谢你,我会给分的, 请问 我不知道有几个单位的情况下,怎么才能判断所有的呢?用正则,可是我不会哦~~郁闷~!
      

  5.   

    cpp2017 
    ---------------¦ 这个是| 吗? 你测试过吗?谢谢你 
      

  6.   

    推荐一个易懂的教程: 正则表达式30分钟入门教程
    http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
      

  7.   

    indexOf()方法貌似是有截取的起始控制的参数的。你可以查一下msdn。
    我的意思是,有几组数据的话,先把每组数据拆分开来。像你的str就可以用'\r\n\r\n\r\n\r\n'区分。
    然后迭代,对每一个数据由可以用':'和'r\n'拆分到你要得数据段。
    受楼上的启发,用arraylist循环是个不错的方法。
      

  8.   

    cpp2017  
    --------------- 
    这个只是第一个的吧  后面的公司能想办法弄出来吗?
      

  9.   

    string[] strP = str.Split("\r\n".ToCharArray());
    然后分别取里面的值 
      

  10.   

    慕容兄的没问题        string str = "2005/03--2006/11:肇航科技有限公司\r\n所属行业:计算机软件 \r\n软件部 高级软件工程师 \r\njava高级高级软件工程师\r\n\r\n\r\n\r\n2004/07--2005/02:昌盛电脑工作室\r\n所属行业:文字媒体/出版 \r\n设计部 平面设计 \r\n平面设计";
            Regex reg = new Regex(@"(\S+)--(\S+):([\s\S]*?)所属行业:([\s\S]*)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            MatchCollection ms = reg.Matches(str);
            foreach (Match m in ms)
            {
                Response.Write("开始日期:" + m.Result("$1"));
                Response.Write("结束日期:" + m.Result("$2"));
                Response.Write("公司:" + m.Result("$3"));
                Response.Write("行业:" + m.Result("$4"));
                Response.Write(" <BR >");
            }
      

  11.   

    cpp2017   
    ---------------  
    这个只是第一个的吧  后面的公司能想办法弄出来吗?
    ==============
    看看运行结果,后面的公司有出来
      

  12.   

    cpp2017    
    ---------------   
    这个只是第一个的吧  后面的公司能想办法弄出来吗? 
    ============== 
    看看运行结果,后面的公司有出来
    ============== 
    出来之后如果再细分,是再重复一便吗?  谢谢你
      

  13.   

    string str = "2005/03--2006/11:肇航科技有限公司\r\n所属行业:计算机软件 \r\n软件部 高级软件工程师 \r\njava高级高级软件工程师\r\n\r\n\r\n\r\n2004/07--2005/02:昌盛电脑工作室\r\n所属行业:文字媒体/出版 \r\n设计部 平面设计 \r\n平面设计,"; str = str.Replace("\r\n\r\n\r\n\r\n","|");
    string[] arrlist = str.Split("|".ToCharArray());
    foreach(string smstr in arrlist)
    {
       string[] info = smstr.Split("\r\n".ToCharArray());
       起止时间 = info[0].Split(":".ToCharArray())[0];
       公司名称 = info[0].Split(":".ToCharArray())[1];
       所属行业 = info[1].Split(":".ToCharArray())[1];
       描述 = info[2] + info[3];
    }
      

  14.   

    cpp2017 
    ====================
    谢谢大哥了,我的意思就是比如上面的字符串有2个公司,要每个公司都有起始时间,公司名称,所属行业,后面描述再次谢谢你  谢谢大家
      

  15.   

    本来就有啊.
    foreach (Match m in ms)
    这个ms.Count = 2 你用ms[0]就是第一个ms[1]就是第二个.你要得到第二个公司的名称就用 ms[1].Result("$3")
      

  16.   

    cpp2017 
    -------
    谢谢大哥  
      

  17.   

    正则就是好用..MARK一下.追捧一下...
      

  18.   

    正则效率不高,用indexof查找位置,然后substring截取,你贴的可能部分代码,要分析的话,需要针对页面分析。测试一下论坛:
    Select * From Table
      

  19.   

    cpp2017 的方法只能取到一个啊