使用正则表达式替换坏词

2023-11-22

我正在尝试创建一个坏词过滤器方法,我可以在每次插入和更新之前调用该方法来检查字符串中是否有任何坏词并替换为“[Censored]”。

我有一个 SQL 表,其中有一个坏词列表,我想将它们带回来并将它们添加到列表或字符串数​​组中,并检查已传入的文本字符串,如果发现任何坏词,请替换它们,返回过滤后的字符串。

我为此使用 C#。


在进行字符串替换而不考虑单词边界之前,请参阅这篇“clbuttic”(或针对您的情况的 cl[Censored]ic)文章:

http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredible-intercoursing-bad-idea.html

Update

显然不是万无一失的(参见上面的文章 - 这种方法很容易绕过或产生误报......)或优化(正则表达式应该被缓存和编译),但以下将过滤掉整个单词(没有“clbuttics”) ) 和单词的简单复数形式:

const string CensoredText = "[Censored]";
const string PatternTemplate = @"\b({0})(s?)\b";
const RegexOptions Options = RegexOptions.IgnoreCase;

string[] badWords = new[] { "cranberrying", "chuffing", "ass" };

IEnumerable<Regex> badWordMatchers = badWords.
    Select(x => new Regex(string.Format(PatternTemplate, x), Options));

string input = "I've had no cranberrying sleep for chuffing chuffings days -
    the next door neighbour is playing classical music at full tilt!";

string output = badWordMatchers.
   Aggregate(input, (current, matcher) => matcher.Replace(current, CensoredText));

Console.WriteLine(output);

给出输出:

我已经[审查][审查]几天没有[审查]睡觉——隔壁邻居正在全速播放古典音乐!

请注意,“classical”不会变成“cl[Censored]ical”,因为整个单词都与正则表达式匹配。

Update 2

为了演示如何轻松地破坏这一点(以及一般的基本字符串\模式匹配技术),请参阅以下字符串:

“我已经好几天没睡过觉了——隔壁邻居正在全速演奏古典音乐!”

我已将“i”替换为土耳其小写不带点的“ı”。看起来还是蛮有攻击性的!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用正则表达式替换坏词 的相关文章

  • 正则表达式在 Velocity 模板中不起作用

    我在 Test java 中尝试过这个 String regex lt s br s s gt String test1 lt br gt System out println test replaceAll regex 但是当我在速度模板
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 将扩展关联到程序的脚本

    我的客户正在将某些工作站中的 MS Office 替换为 OpenOffice 我的程序使用 xml 扩展名 使用开放格式 将文件导出到 Excel 并使用当前关联的程序 使用 ShellExecute 打开它 问题是 OpenOffice
  • 如何在 R Shiny 中设置单个 selectInput 菜单的样式?

    您可以将 css 样式应用到单个 selectInput 菜单吗 我在其他文章中找到了处理 selectInput 菜单样式的代码 但结果会影响应用程序中的所有内容 我只想操作单独的菜单 我还在考虑根据服务器中发生的条件向各个元素添加样式
  • 用 Prolog 编写的正则表达式解析器

    我已经在这个家庭作业问题上用头撞墙几个小时了 我们必须用 Prolog 解析正则表达式 在大多数情况下 我的谓词都可以工作 但是有一些正则表达式和字符串组合会导致它们耗尽 SWI Prolog 中的堆栈空间 以下是包含两种正则表达式字符串组
  • MediaController 定位 - 绑定到 VideoView

    关于如何定位 已经有很多讨论了 MediaController大多数答案都是使用setAnchorView 方法 乍一看这个解决方案似乎有效 但就我而言却无效 根据这个Post setAnchorView仅作为初始定位的参考MediaCon
  • 进入 docker 容器,exec 丢失 PATH 环境变量

    这是我的 Dockerfile FROM ros kinetic ros core xenial CMD bash 如果我跑docker build t ros docker run it ros 然后从容器内echo PATH 我去拿 o
  • 使用动态规划将自然数表示为平方和

    问题是找到求和为数字 n 所需的最小平方数 一些例子 min 1 1 1 min 2 2 1 1 min 4 1 2 min 13 2 3 2 我知道拉格朗日四平方定理它指出任何自然数都可以表示为四个平方和 我正在尝试使用 DP 来解决这个
  • 如何在 Process.StandardOutput 中禁用输出缓冲

    这个问题以前已经被问过不止一次了 但我在这些讨论中都没有找到令人满意的答案 我正在启动一个命令行进程 该进程可以对 STDOUT 进行实时测量 大约每秒产生一个新结果 使用 System Diagnostics Process Standa
  • php 和 mongodb 中的时间戳

    我花了三天时间试图解决这个问题但没有成功 我正在使用 MongoDB PHP 库 并且尝试使用 PHP 文档中的示例将时间戳转换为有效日期 但它总是返回 1970 01 17 代码是 utcdatetime new MongoDB BSON
  • 防止 NuGet 内容和 contentFiles 文件夹中出现重复文件

    我的 NuGet 包需要提供一些相当大的文件来构建输出目录 在旧的 NuGet 模型中 此类文件必须存储在content的文件夹 nupkg 当在一个NuGet 3 3 中引入的新模型 此类文件必须存储在contentFiles folde
  • Phonegap - 忽略 Android 上的字体大小显示设置

    通过配置更改字体大小显示设置时 我在某些 Android 设备上遇到问题 在网络浏览器中 我的应用程序很简单 忽略这一点 对于其他一些手机也是如此 但对于某些特定的手机 如摩托罗拉 G 或 X 更改此配置也会影响我的 Phonegap 应用
  • C# 字符串格式化和填充

    看起来这应该是一件简单的事情 但我一直没能做到正确 我看过http idunno org archive 2004 14 01 122 aspx以供参考 例子 我想打印一个双精度值表 每个双精度输出具有 3 位小数精度 并占用 10 个空格
  • Babel 6 CLI:意外的令牌导出?

    我正在尝试使用它的 CLI 来运行 Babelbabel node但我不断得到Unexpected token export错误 我知道 Babel 6 都是关于插件的 我需要通过设置插件 babelrc但它似乎不能正常工作 这是我的问题
  • Boost序列化库升级

    我怎么知道我可以安全升级Boost序列化库在生产系统上而不破坏与现有数据的兼容性 我是否应该执行任何测试 以确保新版本能够成功读取以前版本的库以二进制格式存储的所有数据 Boost Serialization 库本身是否保证版本之间的某种兼
  • 如何触发对 Jackson 中实现 JsonSerialized 的类的 .serializeWithType() 的调用?

    这是杰克逊 2 2 x 我有一堂课实施JsonSerializable 该接口有两种实现方法 serialize and serializeWithType 我想测试这个类的序列化 并且我可以触发对serialize 容易地 然而 并非如此
  • 使用 pandas 创建日期范围列表

    我得到了包含 start date 和 end date 列的 DataFrame start date finish date 0 2019 06 16 2019 06 23 1 2019 05 29 2019 06 05 2 2019
  • DynamicResource 颜色不适用于边框上的 BorderBrush - Bug?

    Visual Studio 2010 NET WPF 4 0 我认为这可能是一个 WPF 错误 但我似乎找不到有关它的错误报告 为了弥补我错过了一些明显的东西的可能性 我转向 stackoverflow 寻求答案 考虑这个 xaml 代码隐
  • 如何编写响应过滤器?

    有没有办法只处理过滤器中的响应 下面写的代码正确吗 public void doFilter request response chain code to handle request chain doFilter request resp
  • C# MongoDB 驱动程序仅返回 100 个结果

    我正在编写邮寄标签 需要为每个文档打印一个标签 我的 Collection 中有 829 个文档 但是当我检索它们时 我只得到 100 个文档 我有这个 LINQ 代码 IMongoCollection Pessoa Pessoa data
  • 使用 Firebase firestore 进行分页 - swift 4

    我正在尝试使用 firestore 对数据进行分页 无限滚动我的表格视图 我已经尽我所能集成了谷歌提供的分页代码 但在正确加载数据方面仍然遇到问题 初始数据集根据需要加载到表视图中 然后 当用户点击屏幕底部时 下一个 x 数量的项目将被加载
  • 使用正则表达式替换坏词

    我正在尝试创建一个坏词过滤器方法 我可以在每次插入和更新之前调用该方法来检查字符串中是否有任何坏词并替换为 Censored 我有一个 SQL 表 其中有一个坏词列表 我想将它们带回来并将它们添加到列表或字符串数 组中 并检查已传入的文本字