求正则。 本帖最后由 air123456789 于 2010-09-13 14:08:21 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); (1) \\red[^;]+(2) (?<=\\cf[^ ]+\s+)\S+(?=\s*\\par) 这个“ aaaaaaaaaa ” “ bbbbbbbbbbbbb ” “ cccccccccc ” ...是根据什么规则? 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--------------神奇的分割线--------------aaaaaaaaaabbbbbbbbbbbbbccccccccccdddddddddddeeeeeeeeeeffffffffffffffffffff 这个是RTF格式的内容 aaaaaaaaaa 前面标记的是一个样式。 bbbbbbbbbbbbb 前面标记的又是另一个样式 求“\red0\green0\blue0” 的 能不能限制下是在 {\colortbl ;\red0\green0\blue0;} 里的? {\colortbl ; } “ aaaaaaaaaa ” “ bbbbbbbbbbbbb ” 这个之后 不一定有 \par 但是是在最后一个花括号之前的。。要怎么弄呢? 如果\par不一定有Regex reg2 = new Regex(@"(?<=\\cf[^ ]+\s+)\S+(?=\s*\\par|})", RegexOptions.Compiled); 谁有圆形的螺旋代码给一个呀 怎样对函数进行注释? 弹出提示框前能否现在服务端判断一下 学籍档案管理系统 在多线程中是否可以在同一时间内将一个函数锁住 怎样识别图片码! 牛人在吗? 请进来指导一下:如何实现QQ那样的离线消息? 高手才进------文本替换中的几个高级问题. 表 无外键 联合查询 求救:为什么我的应用程序不能添加已注册的COM组件的引用?(内详) 急救C#组件定义 winform判断loading
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) (?<=\\cf[^ ]+\s+)\S+(?=\s*\\par)
“ aaaaaaaaaa ” “ bbbbbbbbbbbbb ” “ cccccccccc ” ...
是根据什么规则?
{
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
这个是RTF格式的内容 aaaaaaaaaa 前面标记的是一个样式。 bbbbbbbbbbbbb 前面标记的又是另一个样式
求“\red0\green0\blue0” 的 能不能限制下是在 {\colortbl ;\red0\green0\blue0;} 里的? {\colortbl ; }
Regex reg2 = new Regex(@"(?<=\\cf[^ ]+\s+)\S+(?=\s*\\par|})", RegexOptions.Compiled);