2016-03-24 21 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