A12345       ->   A1 2345
A123456      ->   A 123456
123A4567     ->   123A 4567
12345A12345  ->   1234 5A1 2345 ->特别注意
123A12B223C  ->   123A12B223C 
规则:
字符串从后向前,截取数字,以2为基数进行分割(截取数必须大于4个)
我自已写了一个感觉不是很好,想知道大家有什么好的算法!

解决方案 »

  1.   

    A123456      ->  A 123456 
    为什么不是
    A123456      ->  A1 23456 
    呢?12345A12345  ->  1234 5A1 2345
    123A12B223C  ->  123A12B223C 这两条能不能解释一下?你并没有把完整的规则描述出来,何来算法?
      

  2.   

    12345A12345  ->  1234 5A1 2345 为什么不
    12345A12345  ->  1 2345 A1 2345 
      

  3.   

    不好意思:
    12345A12345  ->  1234 5A1 2345 ->特别注意 
    123456A1234  ->  123456 A 1234
    1234567A123  ->  123456 7A123
    如果开始是数字,且大于连续4位以上是数字则是上面的规则
    如果没有连续四位的数字则不进行分割
      

  4.   

    如果开始是数字,且大于连续4位以上是数字
    12345A12345  ->  1234 5A1 2345
      

  5.   


    上面是什么规则啊?!
     12345A12345  ->  1234 5A1 2345
     123456A1234  ->  123456 A 1234
    第二个为什么不是
     123456A1234  ->  1234 56A 1234??另外
    A123456 -> A 123456
    为什么不是
    A123456 -> A1 23456
    呢? 你这描述能力
      

  6.   

    你的开始是从字符串开始,还是从扫描的开始(就是字符串结尾)?
    1234567A123  ->  123456 7A123
    为什么不是
    1234567A123  ->  1 234567 A123
      

  7.   

    反过来说,既然可以
    A123456      ->  A 123456 
    那为什么不能:
    A12345      ->  A 12345这中间的规则是什么?
      

  8.   

    string[] strings = { "A12345", "A123456", "123A4567", "12345A12345", "123A12B223C" };
    string pattern = @"(?=\d*4\d*)(\d{2}){2,}|.+?(?=\d*4\d*)(?=(\d{2}){2,}(?!\d))";
    Regex regex = new Regex(pattern, RegexOptions.Compiled | RegexOptions.ExplicitCapture);
    foreach (string str in strings)
    {
        Console.Write("\n{0}\t->\t", str);
        MatchCollection mc = regex.Matches(str);
        if (mc.Count == 0)
        {
            Console.Write(str);
        }
        else
        {
            foreach (Match m in mc)
            {
                Console.Write("{0} ", m.Value);
            }
        }
    }
      

  9.   

    利用.NET正则中的特性,用Split非常简单string[] test = new string[] {"A1234", "A12345", "123A123456", "1A1234567", "12A12A2345", "A1234A12345" };
    Regex reg = new Regex(@"(\d{4}(?:\d{2})*)", RegexOptions.RightToLeft);
    foreach (string src in test)
    {
         richTextBox2.Text += src.PadRight(12, ' ') + "->  ";
         foreach (string s in reg.Split(src))
         {
              richTextBox2.Text += s + " ";
         }
         richTextBox2.Text += "\n";
    }
    /*---------输出-----------
    A1234       ->  A 1234  
    A12345      ->  A1 2345  
    123A123456  ->  123A 123456  
    1A1234567   ->  1A1 234567  
    12A12A2345  ->  12A12A 2345  
    A1234A12345 ->  A 1234 A1 2345  
    */