假设您有一条类似于以下内容的推文消息:
"Hoot, this is soooooo coooool!!!"
我想提出一个Java正则表达式,以便String.replaceAll将产生以下结果:
"Hoot, this is so cool!"
我开始尝试置换以下内容但未成功:
original.replaceAll("(.)\\1+", "$1");
有人知道如何提出一个正则表达式,将贪婪地将几个连续的字符减少为两个字符?解决方案不能将两个重复字符减少为一个(例如,单词hoot不应该减少为热)。
答案 0 :(得分:2)
如果你需要用两个字符替换2个以上的字符,你可以稍微修改你的表达式,如下所示:
original.replaceAll("(.)\\1+", "$1$1");
但是,正则表达式中没有足够的信息为"soooooo"
制作例外并将其修改为"so"
,而不是"soo"
。
答案 1 :(得分:1)
使用纯正则表达式,你会得到的最好的是dasblinkenlight所展示的,但你的问题不仅仅是简单地用2个字符替换2个字符。你真正想要的是它根据单词的上下文删除额外的重复以正确拼写单词。
示例:
没有纯正的正则表达式解决方案。正则表达式不能进行拼写和语法检查。