忽略重复的字符

时间:2013-12-31 21:20:52

标签: regex replace character ignore repeat

我正在努力建立一个咒骂预防系统,到目前为止我忽略了空白(用“\ s *”)而我忽略了这个案例(“(?i)”)。我怎么会忽略重复的字符?例如heeeello。

5 个答案:

答案 0 :(得分:0)

没有任何标记可以打开以忽略任何重复的字符。但是,您可以使用“一个或多个”量词(+)来匹配任何字符,字符类或组的一个或多个匹配项。例如,模式he+l+o将匹配以下所有内容:

  • helo
  • heelo
  • hello
  • heeeello

答案 1 :(得分:0)

假设您需要一个通用的解决方案来删除重复的字符,只要成功,您就会反复将(.)\1替换为\1

答案 2 :(得分:0)

使用+来捕获()中的序列重复次数。 e +将捕获heeeeello中的所有e。

查看rubular.com,非常简单的学习,练习和测试正则表达式的方法。

答案 3 :(得分:0)

您需要捕获单个字符,然后使用对最近捕获的组的反向引用来检查它是否重复:

(.)\1+

如果字符串匹配则重复。

Live demo

答案 4 :(得分:-1)

问题比你想象的要困难。假设您希望为字典中的每个单词匹配“不少于此字符数”。然后你必须在每个字符之后用+创建一个正则表达式字典...

Initial dictionary:
boom
smurf
tree
cannibals

使用文本编辑器处理字典:

sed -e 's/\(.\)/\1\+/g' dictionary.txt > regex.txt

这会在所有字符之间加上+

b+o+o+m+
s+m+u+r+f+
t+r+e+e+
c+a+n+n+i+b+a+l+s+

现在你可以匹配你的“重复”单词:

bom : no match
smuuurf : match
trees   : no match
canibals : no match
cannnibalssss : match

您可能希望添加“字边界” - 以便smurfette不会抓住smurf。这意味着在每个表达式之前和之后添加\b(“单词边界”)。

注意 - 仅删除字典中的所有重复字母以及要匹配的字词是不够的 - 否则您可能会因为您的列表上有“大便”而禁止“弹出”(以及您如何知道停止时) “pooop”恰好达到了两个字符)。这就是为什么我更喜欢这种解决方案,而不是其他一些建议剥离重复的解决方案。