本帖最后由 air123456789 于 2010-09-13 14:08:21 编辑

解决方案 »

  1.   


                string a = @"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}{\f1\fnil ;}{\f2\fnil\fcharset134 \'b7\'bd\'d5\'fd\'d2\'a6\'cc\'e5;}{\f3\fnil\fcharset134 \'b7\'bd\'d5\'fd\'ca\'e6\'cc\'e5;}{\f4\fnil\fcharset134 \'bf\'ac\'cc\'e5_GB2312;}{\f5\fnil\fcharset134 \'c1\'a5\'ca\'e9;}{\f6\fnil\fcharset134 \'ba\'da\'cc\'e5;}{\f7\fswiss\fcharset0 Arial;}}
    {\colortbl ;\red0\green0\blue0;\red0\green255\blue255;\red0\green0\blue255;\red138\green43\blue226;\red165\green42\blue42;\red169\green169\blue169;\red255\green0\blue0;\red0\green255\blue0;\red255\green255\blue0;}
    \viewkind4\uc1\pard
    \cf1\lang2052\f0\fs30   aaaaaaaaaa                  \par
    \cf2\f2\fs40             bbbbbbbbbbbbb           \par
    \cf3\f3\fs50              cccccccccc                   \par
    \cf4\f4\fs60               ddddddddddd                  \par
    \cf5\f5\fs70                eeeeeeeeee          \par
    \cf6\f6\fs80                 ffffffffffffffffffff                   \par
    \cf6\f6                                                                    \par
    }";            Regex reg = new Regex(@"\\red\d+\\green\d+\\blue\d+");            foreach (Match m in reg.Matches(a))
                    Console.WriteLine(m.Value);
      

  2.   

    (1) \\red[^;]+
    (2) (?<=\\cf[^ ]+\s+)\S+(?=\s*\\par)
      

  3.   

    这个
    “ aaaaaaaaaa ” “ bbbbbbbbbbbbb ” “ cccccccccc ” ...
    是根据什么规则?
      

  4.   

        private static void TestRegex22()
        {
            string a = @"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}{\f1\fnil ;}{\f2\fnil\fcharset134 \'b7\'bd\'d5\'fd\'d2\'a6\'cc\'e5;}{\f3\fnil\fcharset134 \'b7\'bd\'d5\'fd\'ca\'e6\'cc\'e5;}{\f4\fnil\fcharset134 \'bf\'ac\'cc\'e5_GB2312;}{\f5\fnil\fcharset134 \'c1\'a5\'ca\'e9;}{\f6\fnil\fcharset134 \'ba\'da\'cc\'e5;}{\f7\fswiss\fcharset0 Arial;}}
    {\colortbl ;\red0\green0\blue0;\red0\green255\blue255;\red0\green0\blue255;\red138\green43\blue226;\red165\green42\blue42;\red169\green169\blue169;\red255\green0\blue0;\red0\green255\blue0;\red255\green255\blue0;}
    \viewkind4\uc1\pard
    \cf1\lang2052\f0\fs30   aaaaaaaaaa                  \par
    \cf2\f2\fs40             bbbbbbbbbbbbb           \par
    \cf3\f3\fs50              cccccccccc                   \par
    \cf4\f4\fs60               ddddddddddd                  \par
    \cf5\f5\fs70                eeeeeeeeee          \par
    \cf6\f6\fs80                 ffffffffffffffffffff                   \par
    \cf6\f6                                                                    \par
    }";
            Regex reg1 = new Regex(@"\\red[^;]+", RegexOptions.Compiled);
            Regex reg2 = new Regex(@"(?<=\\cf[^ ]+\s+)\S+(?=\s*\\par)", RegexOptions.Compiled);
            foreach (Match m in reg1.Matches(a))
            {
                Console.WriteLine(m.Value);
            }
            Console.WriteLine("--------------神奇的分割线--------------");
            foreach (Match m in reg2.Matches(a))
            {
                Console.WriteLine(m.Value);
            }
        }输出\red0\green0\blue0
    \red0\green255\blue255
    \red0\green0\blue255
    \red138\green43\blue226
    \red165\green42\blue42
    \red169\green169\blue169
    \red255\green0\blue0
    \red0\green255\blue0
    \red255\green255\blue0
    --------------神奇的分割线--------------
    aaaaaaaaaa
    bbbbbbbbbbbbb
    cccccccccc
    ddddddddddd
    eeeeeeeeee
    ffffffffffffffffffff
      

  5.   


     这个是RTF格式的内容  aaaaaaaaaa   前面标记的是一个样式。  bbbbbbbbbbbbb  前面标记的又是另一个样式
      

  6.   


     求“\red0\green0\blue0”  的  能不能限制下是在  {\colortbl ;\red0\green0\blue0;} 里的? {\colortbl ;                   } 
      

  7.   

    “ aaaaaaaaaa ” “ bbbbbbbbbbbbb ”  这个之后 不一定有   \par   但是是在最后一个花括号之前的。。要怎么弄呢?
      

  8.   

    如果\par不一定有
    Regex reg2 = new Regex(@"(?<=\\cf[^ ]+\s+)\S+(?=\s*\\par|})", RegexOptions.Compiled);