本帖最后由 LoveCcav 于 2010-10-12 13:47:53 编辑

解决方案 »

  1.   


    比如说 有个表情的符号代码是   ":)" , 在这个字符串的前后, 都有一个 ASCII码为 29的字符 
      

  2.   

     ASCII码为 29的字符 是什么? 
      

  3.   


    把我在1楼发的那个字符串, 复制到记事本里面, 看能够看到了, 也可以粘贴到VS里面, 只不过不会显示出来, 比如:
    string s = "(cash)(flex)";
    byte[] b= Encoding.Unicode.GetBytes(s);看看第12个就知道了.
      

  4.   

    如果29是十六进制
    (?is)\x29.+?\x29
    如果29是十进制
    (?is)\x1D.+?\x1D
      

  5.   

    这样?string test = ":|:*:P sdfsf(blush)sf:^)测试一不念旧jkdsflk |-)sdfdf|-(safd(inlove)";
    Regex reg = new Regex(@"\x1D.*?\x1D");
    MatchCollection mc = reg.Matches(test);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }
    /*-----输出-------
    :|
    :P sdfsf
    sf:^)
    |-(
    */
      

  6.   

    没有考虑到两个表情连续的情况 , 仔细看了一下, 两个表情代码如果连接,他们之间只有一个 Ascii为29的字符,
    比如: "测试(wait)(happy)再测试一下8-|"测试代码:            
    string test = "测试(wait)(happy)再测试一下8-|";
    Regex reg = new Regex(@"\x1D.*?\x1D");
    MatchCollection mc = reg.Matches(test);
    foreach (Match m in mc)
    {
          Console.WriteLine(m.Value);
    }输出的是 "(wait)", "再测试一下", 而实际上想得到的结果是: "(wait)", "(happy)", "8-|", 高手们再帮忙看看.谢谢.
      

  7.   

    这样是否可行?
    (?<=\x1D)[^\u4e00-\u9fa5]+?(?=\x1D)
      

  8.   

    或者这样:(?<=\x1D)(?![\u4e00-\u9fa5]{2,}).*?(?=\x1D)