簡體   English   中英

正則表達式替換重復的字符

[英]Regex to replace repeated characters

有人可以給我一個Java正則表達式來替換以下內容。

如果我有一個像“Cooooool”這樣的詞,我需要用3 o將其轉換為“Coool”。 所以我可以用正常的詞“酷”來區分它。

另一個例子:“happyyyyyy”應該是“happyyy”

replaceAll("(.)\\1+","$1"))

我嘗試了這個,但它刪除了所有重復的字符,只留下一個。

像下面這樣改變你的正則表達式。

string.replaceAll("((.)\\2{2})\\2+","$1");
  • (第一個捕撈組的開始。
  • (.)捕獲任何角色。 在這種情況下,您可以使用[az]
  • \\\\2指第二個捕獲組。 \\\\2{2}必須重復兩次。
  • )第一次捕獲組結束。 所以這將捕獲前三個重復的字符。
  • \\\\2+重復第二組一次或多次。

DEMO

我想你可能會想要這樣的東西:

str.replaceAll("([a-zA-Z])\\1\\1+", "$1$1$1");

這將匹配一個字符重復3次或更多次的位置,並將用相同的字符替換它三次。

$1只匹配一個字符,因為你圍繞着匹配的字符。
\\\\1\\\\1+僅匹配該字符,如果它連續出現至少三次。

這個調用也比具有巨大的正則表達式並且僅使用一個$1更具可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM