当前位置: 首页 > 面试题库 >

正则表达式将两个(或多个)连续字符替换为一个?

孙自怡
2023-03-14
问题内容

在Java中,可以使用哪个正则表达式来替换它们,例如:

之前:aaabbb之后:ab

之前:14442345之后:142345

谢谢!


问题答案:

在Perl中

s/(.)\1+/$1/g;

可以做到这一点,我假设如果Java具有与Perl兼容的正则表达式,它也应该可以工作。

编辑:这是什么意思

s {
    (.)  # match any charater ( and capture it )
    \1   # if it is followed by itself 
    +    # One or more times
}{$1}gx;  # And replace the whole things by the first captured character (with g modifier to replace all occurences)

编辑:正如其他人指出的那样,Java中的语法将成为

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

记住要逃避\ 1



 类似资料:
  • 我有一根绳子: 我想将所有字符(#,)替换为(#),因此例外的输出是: 注意:我不知道字符串中有多少(#)或(#)序列 我尝试的是: 我试着写: 但结果是: 我的在线尝试 我尝试将(*)用于序列,但没有成功: 那么我如何才能得到我的例外输出?

  • 我需要使用通配符类型搜索筛选一组字符串,如下所示: 寻找应该匹配你好,但不是Helo 查找应该匹配"pant"和"想要"但不匹配"ant" 寻找应该匹配"吉普赛人"和"典型" 代表一个或多个字符。我不介意手写或基于正则表达式的搜索。有什么想法吗?典型的。NET方法的通配符匹配0或更多,但我需要1个或更多字符。我该怎么做?

  • 我需要用骆驼大小写字符和 替换一些驼峰大小写字符。 我得到的是这样一个字符串: 这些字符串通过正则表达式将数字与街道分开: 现在,我有两个问题。 > 我非常不擅长正则表达式。 上面的regex还删除了街道名称中的每一个,在德国和欧洲有很多这样的名称。 实际上,调整正则表达式以不剪切任何连字符非常容易,但我想了解正则表达式的工作原理,因此我决定尝试找到一个正则表达式,它只是替换字符串中的每个骆驼大小

  • 这工作正常,所以如果歌曲名称是这是*名称,它将创建别名。但是,如果名称在开头或结尾有特殊字符它将创建 - 在两端创建连字符。

  • 问题内容: 有没有办法使用正则表达式来匹配重复的字符集?例如: 我知道那是错的。但是有什么可以匹配这种效果的吗? 更新: 您可以使用嵌套捕获组吗?像什么? 问题答案: 将要重复的正则表达式放在括号中。例如,如果您要重复5次: 或者,如果您想要任意数量的重复(0或更多): 或一个或多个重复: 编辑 以回应更新 正则表达式中的括号有两个作用:它们将正则表达式中的一系列项目组合在一起,以便您可以将运算符

  • 问题内容: 我有一个有效的正则表达式: 我也有一个正则表达式: 但是我不知道如何将两者结合起来 我试过了,但实际上没有用… 如果重要的话,这就是Java正则表达式中的全部内容。 问题答案: 如果您想要匹配以或开头的序列的正则表达式,请尝试以下操作: 但是除了周围的两个空格字符外,您的正则表达式也应该与之匹配: 这两个正则表达式匹配同一组字符串。