java - 正则表达式替换重复的字符串模式

标签 java regex string pattern-matching replaceall

我需要用每个基本构造单元替换单词中的重复模式。例如 我有字符串“TATATATA”,我想将其替换为“TA”。另外,我可能会替换 2 次以上的重复,以避免替换正常单词。

我正在尝试使用Java中的replaceAll方法来做到这一点。

最佳答案

我想你想要这个(适用于任何长度的重复字符串):

String result = source.replaceAll("(.+)\\1+", "$1")

或者,优先考虑较短的匹配:

String result = source.replaceAll("(.+?)\\1+", "$1")

它首先匹配一组字母,然后再次匹配(在匹配模式本身中使用反向引用)。我尝试了一下,似乎成功了。

<小时/>

示例

String source = "HEY HEY duuuuuuude what'''s up? Trololololo yeye .0.0.0";

System.out.println(source.replaceAll("(.+?)\\1+", "$1"));

// HEY dude what's up? Trolo ye .0

关于java - 正则表达式替换重复的字符串模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24008657/

相关文章:

java - 从字符串中提取电话号码

java - Mapstruct,从多个输入参数映射到嵌套对象

java - findViewById 返回 null

java - 4 键值HashMap?大批?最好的方法?

java - 将文件中的所有数字解析为 BigDecimal Java

c# - C#子字符串引发异常

java - 为什么属性 '' 导致“异常”永远重复?

java - 需要 RegEx 代码来删除邮政编码末尾的破折号,除非破折号后有数字

python - 在正则表达式 python 上分割两个字符串,但包含使用 re.split 并返回一个列表

python - 完整的后缀数组