给了一行数据,这行数据有五个字段,我用正则匹配了一下(.{8,8})(.{4,4})(.{4,4})(.{20,20})(.{13,13}),如果是都是半角的话,没有问题,但是如果里面某个字段含有汉字的话,就会匹配不上。请问如何处理呢 

解决方案 »

  1.   

    下面是一条数据,这条数据的空格都是必要的。U0000227900300001TRJ-01              4522646434118女性上着                                                                                                                    000007510001000100000600000000那我就拿实际的了,都是实际数据
    正则表达式@"(U)(.{8})(.{4})(.{4})(.{20})(.{13})(.{32})(.{36})(.{36})(.{20})(.{8})(.{4})(.{4})(.{6})(.{6})(.)(.)"};请过客大侠帮忙看看吧
      

  2.   

      我不是太明白楼主的意思,不过如果你的一行数据不能确定是否有汉字的话,你应该将{}内的数字写成最小程度和最大长度的形式,{13,13}这样的写法,确实画蛇添足。
      我的意思是,如果你需要13个字符的输入,而此时偶尔需要输入汉字的话,那么可以使用{13,n},其中n是一个大于13的数字。
      我只是提提意见,说不对勿见怪。
      如果解决不了,还是建议重看下《C#字符串和正则表达式参考手册》
      

  3.   

    .net程序运行时,string内部都是unicode编码的,汉字、英文都算一个字符。
    如果你需要把一个汉字算成2个字符,可以先做一个替换:
    str = Regex.Replace(str, "[\u4e00-\u9fa5]", "\\$&");
    这样就可以把“女性上着”替换成“\女\性\上\着”,然后再用你的正则去匹配就可以了,最后得到结果后,再从结果中去掉“\”:result = result.Replace("\\", "");上面的办法比较复杂,其实解析格式化数据报文可以用更简单的方法,直接从字节流中读取指定编码的字符串就可以了。比如读入数据保存在buf中,buf是一个字节数组,用:
    Encoding.GetEncoding("gb2312").GetString(buf, 1, 8);
    可以读出第一个字段的字符串,9,4是第二个字段,13,4是第三个字段,以此类推
      

  4.   

    str = Regex.Replace(str, "[\u4e00-\u9fa5]", "\\$&");
    这个不管用啊。
      

  5.   

    本帖最后由 lxcnn 于 2010-10-11 11:01:49 编辑
      

  6.   

    这里有一个原来解决的问题,但愿对你有帮助http://topic.csdn.net/u/20100420/18/86ba3d12-f4ef-4036-9eb8-f465af0684e0.html
      

  7.   

    字段之间没有空格那就比较麻烦了,因为是按字节数统计的个数,正则无法区分某个字符究竟是前一字段,还是后一字段的能不能从数据源考虑一下,为什么会产生这样的数据源,这种数据源,采用哪种方式处理都是比较麻烦的当然,因为字节数固定,自己写方法foreach遍历,判断每个字符是单字节还是双字节,然后按字节数提取字段也是可以的,就是字段太多,实现起来比较麻烦,不易扩展,变成体力活了而已