寻求俄语脏话过滤正则:匹配单词首尾以外的西里尔字符
俄语脏话过滤:匹配单词首尾外西里尔字符的正则方案
问题根源
\B\w\B无效的核心原因是默认规则下\w仅匹配ASCII字母、数字和下划线,不包含西里尔字符。要处理俄语字符,必须明确指定西里尔字符类,结合零宽断言定位首尾之外的目标字符。
解决方案正则
使用带零宽断言的正则,精准匹配位于两个西里尔字符之间的单个字符:
(?<=[ёа-яЁА-я])[ёа-яЁА-я](?=[ёа-яЁА-я])
代码示例(Java)
String dirtyWord = "ОченьПлохоеСлово"; String censored = dirtyWord.replaceAll("(?<=[ёа-яЁА-я])[ёа-яЁА-я](?=[ёа-яЁА-я])", "*"); System.out.println(censored); // 输出: О**************о
正则逻辑拆解
(?<=[ёа-яЁА-я]):正向反向断言,确保当前字符的前一个字符是西里尔字母(覆盖大小写和ё)[ёа-яЁА-я]:匹配需要替换的单个西里尔字符(?=[ёа-яЁА-я]):正向先行断言,确保当前字符的后一个字符是西里尔字母
这种写法会自动跳过单词的首尾字符(首字符无前驱、尾字符无后继,不满足断言条件),完全适配你的需求。
内容的提问来源于stack exchange,提问作者Ivan Dvurechenskiy
相关产品推荐
相关产品推荐

