string s = "汉字123文字english";现在我想按照中文汉字来分割成string[]数组,并且保留此中文得到:string[] arr = {"汉字","123","文字","english"};代码该怎么写?

解决方案 »

  1.   

    正则表达式里不是\b表示边界么我是想split(s,"中文的边界");但是不知道这个表达式怎么写
      

  2.   

    我还是那个笨办法:            string str = "汉字123文字english";
                string[] strarr = Regex.Replace(str, @"[\u4e00-\u9fa5]+", @"~$&~").Trim('~').Split('~');等待高手
      

  3.   

       string s = "汉字123文字english";
       s= Regex.Replace(s, "([\u4e00-\u9fa5]+)", ",$1,");
       s=s.Trim(new char[]{','});
       string[] aa=  Regex.Split(s, ",",RegexOptions.IgnoreCase);
      

  4.   

    如果是用Split方法,开始和结束是中文需要对结果中第一和最后一个元素做下判断
    string str = "汉字123文字english";
    List<string> result = new List<string>(Regex.Split(str, @"([\u4e00-\u9fa5]+)"));
    if (result[0] == "") result.RemoveAt(0);
    if (result.Count > 0 && result[result.Count - 1] == "") result.RemoveAt(result.Count - 1);
    foreach (string s in result)
    {
        Console.WriteLine(s);
    }
    Console.ReadLine();直接匹配
    string str = "汉字123文字english";
    List<string> result = new List<string>();
    MatchCollection mc = Regex.Matches(str, @"[\u4e00-\u9fa5]+|[^\u4e00-\u9fa5]+");
    foreach (Match m in mc)
    {
        result.Add(m.Value);
    }
    foreach (string s in result)
    {
        Console.WriteLine(s);
    }
    Console.ReadLine();或者正则委托另类应用
    string str = "汉字123文字english";
    List<string> result = new List<string>();
    Regex.Replace(str, @"[\u4e00-\u9fa5]+|[^\u4e00-\u9fa5]+", delegate(Match m) { result.Add(m.Value); return ""; });
    foreach (string s in result)
    {
        Console.WriteLine(s);
    }
    Console.ReadLine();