西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識 → 文章中的特殊詞語使用正則替換屏蔽

文章中的特殊詞語使用正則替換屏蔽

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2011/5/10 14:03:17字體大。A-A+

作者:西西點擊:81次評論:2次標(biāo)簽: 正則

  • 類型:電子教程大。9.5M語言:中文 評分:8.0
  • 標(biāo)簽:
立即下載

使用正則替換文章屏蔽詞,1500個屏蔽詞,6KB的文章,替換用時1毫秒
使用正則替換文章屏蔽詞,這個功能很早就用到了,由于使用過程中并未感覺到什么壓力,所以一直沒有對其性能進行優(yōu)化。

今天應(yīng)leader要求,對性能進行了一下測試并作出改進,發(fā)現(xiàn)改進后的性能提高了100多倍!原來替換一篇文章用時130多毫秒,現(xiàn)在只需要不到1毫秒的時間!

前后主要差別在于正則的生成和循環(huán)文章內(nèi)容的次數(shù)。

下邊貼出主要代碼供大家參考。

view sourceprint?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]+$", 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>

/// 檢查輸入內(nèi)容是否包含臟詞(包含返回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>

/// 獲取內(nèi)容中含有的臟詞

/// </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"};//這里應(yīng)該從數(shù)據(jù)庫獲取

}

這個程序可替換以下內(nèi)容:

國民黨

國-民-黨

國o民o黨

fuck

f.u.c.k

110(110的變形寫法不被替換)

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(2)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)