使用正则替换文章屏蔽词,1500个屏蔽词,6KB的文章,替换用时01毫秒
来源:互联网 发布:java中的同步方法 编辑:程序博客网 时间:2024/04/30 22:26
使用正则替换文章屏蔽词,这个功能很早就用到了,由于使用过程中并未感觉到什么压力,所以一直没有对其性能进行优化。
今天应leader要求,对性能进行了一下测试并作出改进,发现改进后的性能提高了100多倍!原来替换一篇文章用时130多毫秒,现在只需要不到1毫秒的时间!
前后主要差别在于正则的生成和循环文章内容的次数。
下边贴出主要代码供大家参考。
private static readonly Regex reg_b = new Regex(@"/B", RegexOptions.Compiled); private static readonly Regex reg_en = new Regex(@"[a-zA-Z]+", RegexOptions.Compiled); private static readonly Regex reg_num = new Regex(@"^[/-/./s/d]+{1}quot;, RegexOptions.Compiled); private static Regex reg_word = null; //组合所有屏蔽词的正则 private static Regex GetRegex() { if (reg_word == null) { reg_word = new Regex(GetPattern(), RegexOptions.Compiled | RegexOptions.IgnoreCase); } return reg_word; } /// <summary> /// 检查输入内容是否包含脏词(包含返回true) /// </summary> public static bool HasBlockWords(string raw) { return GetRegex().Match(raw).Success; } /// <summary> /// 脏词替换成*号 /// </summary> public static string WordsFilter(string raw) { return GetRegex().Replace(raw, "***"); } /// <summary> /// 获取内容中含有的脏词 /// </summary> public static IEnumerable<string> GetBlockWords(string raw) { foreach (Match mat in reg_word.Matches(raw)) { yield return (mat.Value); } } private static string GetPattern() { StringBuilder patt = new StringBuilder(); string s; foreach (string word in GetBlockWords()) { if (word.Length == 0) continue; if (word.Length == 1) { patt.AppendFormat("|({0})", word); } else if (reg_num.IsMatch(word)) { patt.AppendFormat("|({0})", word); } else if (reg_en.IsMatch(word)) { s = reg_b.Replace(word, @"(?:[^a-zA-Z]{0,3})"); patt.AppendFormat("|({0})", s); } else { s = reg_b.Replace(word, @"(?:[^/u4e00-/u9fa5]{0,3})"); patt.AppendFormat("|({0})", s); } } if (patt.Length > 0) { patt.Remove(0, 1); } return patt.ToString(); } /// <summary> /// 获取所有脏词 /// </summary> public static string[] GetBlockWords() { return new string[]{"国民党","fuck","110"};//这里应该从数据库获取 }
这个程序可替换以下内容:
fuck
f.u.c.k
110(110的变形写法不被替换)
- 使用正则替换文章屏蔽词,1500个屏蔽词,6KB的文章,替换用时01毫秒
- 使用正则替换文章屏蔽词
- 2014-5-13-利用正则工具处理要替换的文本-屏蔽词
- 如何屏蔽搜索引擎的文章!
- 屏蔽字然后使用*替换(转)
- 修改注册表屏蔽或替换键盘上的某个按键
- lua之屏蔽字替换为 '*'
- 敏感词替换,基于DFA算法,最快只需要读一遍文章即可完成替换敏感词,最差相当于读两遍文章
- 用正则表达式替换文章中的文字 js
- 使用正则表达式进行多个变量的替换
- js替换文章中的文字
- Editplus使用正则替换
- UE使用 正则替换
- 新年第一贴:用SQL实现替换屏蔽字方法
- 两个替换文章关键字为超链接的函数
- PHP实现在文章中加内链的实例(只替换一次)
- 使用正则表达式的替换功能
- RegExp对象的使用与正则替换
- 使用 XMPP 构建一个基于 web 的通知工具
- 分享一下cookies操作(增、删、改、查)小经验
- Android 程序调用系统发信息程序
- 更新系统新要求
- OverNet
- 使用正则替换文章屏蔽词,1500个屏蔽词,6KB的文章,替换用时01毫秒
- oracle:pl/sql developer 连接远程oracle数据库(精简版)
- 进程注入技术:CreateRemoteThread 和 LoadLibrary技术的步骤 (非dll注入)
- 【小郝推荐】《从实例走进OPhone世界》
- Oracle增加删除主键
- Research Related English
- 错误:预编译头文件 fatal error C1083: Cannot open precompiled header file: 'Debug
- Chord 算法(协议,原理)难点理解平【暂无内容】
- 视频播放器讨论区 欢迎留言~