使用正则替换文章屏蔽词,这个功能很早就用到了,由于使用过程中并未感觉到什么压力,所以一直没有对其性能进行优化。
今天应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的变形写法不被替换)
分享到:
相关推荐
不影响标签属性的简易正则替换html字符串中的文字(原理为使用正则取出html中><之间的内容 然后使用循环从其中匹配对应的内容进行替换)
易语言正则表达式文本替换源码,正则表达式文本替换,子程序_正则文本替换
C#.net正则替换文字实例代码
而本软件正是把强大的正则功能完美地添加到表格中,让 Excel、WPS 支持正则表达式的搜索、匹配提取、替换、定位等,让数据处理能力进化一个层次! 让 Office Excel、WPS 表格支持正则表达式的免费插件:「Excel ...
新版正则表达式。包括零宽断言,正则替换的150种表达方式
主要介绍了mysql update正则替换sql语句的相关资料,需要的朋友可以参考下
本资源文件是我自己总结的,其中包括5个类,这5个类的代码基本概括了java正则表达式替换String的多种情况,比如获取某个文件路径中盘符/后边的部分内容,提取"<title>XXXX</title>"中的文字XXXX,用正则表达式获取指定...
正则表达式替换文本,已测试通过,如有更新另行通知
易语言源码正则表达式文本替换.rar 易语言源码正则表达式文本替换.rar 易语言源码正则表达式文本替换.rar 易语言源码正则表达式文本替换.rar 易语言源码正则表达式文本替换.rar 易语言源码正则表达式文本替换....
用于在sqlserver中替换复杂的字段内容,其实就是使用正则表达式进行内容替换,非常有用,附件中有使用说明和示例
非常好用,简化替换文字的工作,大大提高工作效率
使用正则表达式验证一年的12个月份,程序完全可以运行,方便大家调试开发
正则表达式是一个特殊的字符序列,它能方便的检查一个字符串是否与某种模式匹配,利用正则可以快速准确的对邮箱进行校验。 任务 邮箱验证 任务知识点 正则表达式概念与语法 常用匹配规则 正则表达式检索与替换 知识...
/* 定义替换对象键值 */ var setReferArgs = function(){ var referArgs = new Object(); referArgs['#userID\#'] = userId; referArgs['\#userName\#'] = userName; return referArgs; } /* 替换URL的参数 */ ...
想必大家都遇到过如果验证自己所写的正则表达式是否正确,使用IDE运行或说用JS弹出....这些都太麻烦了,大家可以试试本工具,具体的使用方法,相信大家看看界面,点点。。。几秒钟就可搞定的,大家可以试试看...
EditPlus正则表达式替换字符串详解.txt,经过搜索总结而成,很全面的哦。
word中使用正则表达式进行查找和替换.doc
一个非常好的 正则表达式替换工具 1.1.0.9 可以测试正则表达式 还要以批量替换
java正则表达式替换字符串
效果描述: 经常被<textarea>中的回车符给困扰着, ... 如果只是简单的将字符串strObj调用replace()方法,则结果只替换第一个回车符, 问题不难,关键是得懂得运用正则表达式来操作!