Java正则表达式替换重复的字符(包括非结果)

时间:2016-03-24 10:37:33

标签: java regex

我正在尝试编写一个正则表达式来替换字符串中重复的字符。

捕获的是重复的字符也可能是非结果的。

    Ex: 

    Input: abcdebg
    Replace by character:  x
    Expected Output: axcdebg

我一直试图用正则表达式执行此操作:(.).*(\\1) 但是当我进行替换时的结果是:axg

请建议我如何达到预期效果。

谢谢,
窗扇

2 个答案:

答案 0 :(得分:2)

这里的问题是你匹配字符串的其余部分,直到重复的字符,这意味着它也被替换。您需要捕获它并再次包含它。

所以,

正则表达式:(.)(.*?\\1)

替换为(对于x):x\2

答案 1 :(得分:0)

只有在输入中找到相同字符时,您才可以使用此基于前瞻性的正则表达式替换字符:

String str = "abcdebg";
String repl = str.replaceFirst("(.)(?=.*\\1)", "x");
//=> axcdebg