4

我正在尝试Regex 101中的测验

在任务 6 中,问题是

不好了!昨晚我的朋友们似乎把啤酒洒在了我的键盘上,现在我的键非常粘。有时当我按下一个键时,我会得到两个重复项。你能帮我解决这个问题吗?_ 应删除粗体内容。

我试过这个正则表达式

([a-z])(\1{2})

但无法得到解决方案。

4

4 回答 4

7

该网站上的谜题的解决方案是:

/(.)\1{2}/g

由于键盘上的任何一个键都会卡住,所以我们需要使用..

\1正则表达式中的意思是匹配第一个捕获组(.)匹配的任何内容。

替换为$1\1

您的正则表达式的其余部分是正确的,只是存在不必要的捕获组。

于 2012-12-29T15:33:16.947 回答
3

如果您想精确匹配三个字符,则您的正则表达式是正确的。如果你想匹配至少三个,那就是

([a-z])(\1{2,})

或者

([a-z])(\1\1+)

因为除了第一次出现你不需要捕捉任何东西,这些稍微好一点:

([a-z])\1{2}   # your original regex (exactly three occurences)
([a-z])\1{2,}
([a-z])\1\1+

现在,替换应该恰好是字符的一次出现,仅此而已:

\1
于 2012-12-29T15:38:39.690 回答
1

代替:

(.)\1+

和:

\1

这当然要求您的正则表达式引擎支持反向引用......此外,在替换部分中,根据正则表达式引擎,\1可能必须写为$1.

于 2012-12-29T15:41:24.230 回答
0

我会这样做,(\w)(\1+)?但无法找到如何在给定站点内“删除”...

最好的方法是用空字符串替换第二次匹配的结果

于 2012-12-29T15:39:33.057 回答