首页 > 解决方案 > 正则表达式检测单词中的 smart-alec 空格(!)

问题描述

我正在尝试创建一个正则表达式来阻止“忘记”这个词。聪明的 alec 仍然逍遥法外:

"f o r g e t you", and
"f o r
g e t you" (using \r\n)

在我用

$(?<!(FORGET[\s]*))

我正在尝试使用$(<!(F\s*O\s*R\s*G\s*E\s*T))- 在字母之间捕获空白 0 次或更多次的思考过程......唉,这不起作用。我希望我不会太远,但我会很感激一些帮助。

谢谢

标签: c#.netregex

解决方案


例如,在聊天室中查找禁用词的一种方法是创建它们的所有可能表示形式(包括形态学)的字典,并将特殊字符/序列(如“@”)转换为“a”或“JI”到“Л”。

到目前为止我发现的最佳方式:

  1. 执行特殊序列的转换 (@->a)。
  2. 将纯字母字符连接到一个大行中,删除重复字符 (baaaaaaneeeedddd)。
  3. 从此合并构建后缀树。
  4. 在后缀树中查找禁止的子序列。
  5. 对 10 万条消息进行测试。
  6. 修复一些常见的bug。

它是相当有效和最佳的验证,可以在客户端上执行,而且很难以这样的方式组合单词,它会产生误报。


推荐阅读