找出两个字符串第一个不相同的部分
例:str1: abc123aacc
    str2: abc4567aabb则结果:123   4567这个问题能用正则解决吗?请大哥帮忙

解决方案 »

  1.   

    用正则效率比较低,转换为byte,然后求“与”。
      

  2.   

    恐怕不能,你需要遍历。不可能都是这样“abc”开头的吧。
      

  3.   

    我主要是想根据文件名中的数字,自动从小到大排序:例如:a1.jpg、a2.jpg、---------a11.jpg,
    而不是a1.jpg、a11.jpg、a2.jpg..............同样的道理,如果两个文件名之间只有数值的差别,而且位置相同,则以数字的顺序排列
      

  4.   

    为什么不把文件名做下规定 例如:a001.jpg、a002.jpg、---------a011.jpg, 
      

  5.   

    你可以用正则取出各个文件名中的数字啊.str1: abc123aacc 
    str2: abc4567aabb 另外,如果数字后面的字母也不同你怎么办?
      

  6.   

    还是按照数字顺序排列,例如两个文件:aa12cc.jpg和aa3dd.jpg  则aa3dd.jpg排在第一
      

  7.   

    我要做的是一个类似于ftp资源管理器的东西,到底是什么文件名不是由我做主啊
      

  8.   

    有一种方法,把 a001.jpg 的点前边的a001的ascII加到一起。得到数据后排序。
    正则好慢。
      

  9.   


      如果你只是考虑数值的差别,可以先用“空格”把非数字型的其它字符替换掉,然后用trim去掉最前面的空格,接着以“空格”为分隔符Split出一个数组T(),比较数组中T(0)的值的大小,不就可以进行你要的排序了嘛。  如果有两个(或两个以上)的T(0)的值相同,就可以比较T(1)的值的大小,依次类推。
      

  10.   

    问到偶,那偶就重在参与
    private void button1_Click(object sender, EventArgs e)
    {
        string[] str = { "a1a.jpg", "a11a.jpg", "a12a.jpg", "a12b.jpg", "a7a.jpg" };    Array.Sort(str, delegate (string a, string b) 
            {
                while (a != b)
                {
                    string ta = Regex.Match(a, @"^[^\d]*").Value;
                    string tb = Regex.Match(b, @"^[^\d]*").Value;
                    if (ta != tb) return string.Compare(ta, tb);
                    a = Regex.Replace(a, @"^[^\d]*", "");
                    b = Regex.Replace(b, @"^[^\d]*", "");
                    ta = Regex.Match(a, @"^\d*").Value;
                    tb = Regex.Match(b, @"^\d*").Value;
                    double fa;
                    double fb;
                    double.TryParse(ta, out fa);
                    double.TryParse(tb, out fb);
                    if (fa != fb)
                        return Comparer<double>.Default.Compare(fa, fb);
                    a = Regex.Replace(a, @"^\d*", "");
                    b = Regex.Replace(b, @"^\d*", "");
                }
                return 0;
            }
        );
        foreach (string s in str)
            Console.WriteLine(s);
    }---输出----
    a1a.jpg
    a7a.jpg
    a11a.jpg
    a12a.jpg
    a12b.jpg
      

  11.   


    关键是还是需要考虑非数值啊何况这个是要实现IComparer接口的,算法不能整得太复杂,文件一多速度就会很慢了
      

  12.   

    还有请教一下zswang 大哥,你说我这种情况用遍历字符的速度快还是你那个正则的方法速度快?正则我不怎么熟悉晚上结贴,先放一会~~~