2016-03-24 22 views
0

我想写一个正则表达式来替换字符串中的重复字符中的第一个。Java的正则表达式替换重复的字符(包括非结果)

捕捉是重复字符也可以是非结果性的。

Ex: 

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

我一直在试图用正则表达式来做到这一点:(.).*(\\1) 但结果当我做了取而代之的是:axg

请建议我如何能实现预期的结果。

谢谢
腰带

+0

你能解释_first中重复字符中的字符串_? –

+0

@noob在给出的例子中,'b'是一个重复的字符,我实际上想要替换'b'发生的一个 –

+0

所以你期望的输出是'axcdexg'? –

回答

2

这里的问题是,你匹配的字符串,最长的休息,直到重复字符为好,这意味着它也被替换。你需要捕获它并再次包含它。

所以,

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

替换(对于x):x\2

+0

感谢您的快速回答。我试过(。)(。*?\\ 1),replaceFirst仍然给我错误的答案(和我的一样):axg –

+1

兄弟,对不起我用x $ 2尝试了replaceAll,它看起来像是有效的。让我尝试几个输入,我会接受你的答案。谢谢 –

0

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

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