【问题标题】:How to limit character repetition in a word to 2?如何将单词中的字符重复限制为 2?
【发布时间】:2018-03-07 11:22:00
【问题描述】:

我想删除一个单词中重复两次以上的字符。例如

 "hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day"

 "hhaappyy mmoorning friendss, good good day"

我已经尝试过这样的事情,但它并没有减少到恰好 2 次重复。

gsub('([[:alpha:]])\\1{2}', '\\1', 
   'hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day')

#[1] "hhappyyy mmoorning friendsssss, good god day"

谢谢。

【问题讨论】:

    标签: r regex string


    【解决方案1】:

    您需要使用{2,} 量词并在替换中使用两个\1

    s<-'hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day'
    gsub('([[:alpha:]])\\1{2,}', '\\1\\1', s)
    # => [1] "hhaappyy mmoorning friendss, good good day"
    

    请参阅R demo

    ([[:alpha:]])\\1{2,} 模式匹配一​​个字母并将其捕获到第 1 组,然后匹配相同字符的 2 个或更多重复。替换模式中的两个 \1 将整个匹配替换为 2 次出现的字符。使用两个 \1 占位符是有效的,因为每个匹配项至少有 3 个相同的字符。

    【讨论】:

      【解决方案2】:

      与 Wiktor Stribiżew 相同,但在 javascript 中并替换 每个 字符(数字、标点符号),如果您需要的话。

      var sInput = "hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day";
      var sOutput = sInput.replace(/(.)\1{2,}/g, "$1$1");
      console.log(sOutput);

      【讨论】:

      • 它被标记为 r 是有原因的,我猜 :)
      • 谢谢。它可能对在 java 中寻找相同功能的人有所帮助。
      【解决方案3】:

      fwiw,这是另一个解决方案:

      f = function(x){
          x = strsplit(x, '')[[1]]
          x = rle(x)
          x = rep(x$values, pmin(2, x$lengths))
          paste(x, collapse='')
      }
      

      示例:

      x = "hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day"
      f(x)
      [1] "hhaappyy mmoorning friendss, good good day"
      

      但是,gsub 更容易一些...

      【讨论】:

        【解决方案4】:

        打包 test.com;

        公共类limitCharCount {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
        
            String str = "gggkjjkjkjjjjjsssslklkkkkkk";
        
            char ch[] = str.toCharArray();
            String Test = "";
            //int count = 2;
            for (int i = 0; i < ch.length - 1; i++) {
                if (i == 0 ||i == 1)
                    Test = Test + ch[i];
                else if (!(ch[i]==ch[i-1] && ch[i]==ch[i-2]) )
                {
                    Test = Test + ch[i];
                }
        
            }
        

        System.out.println(测试); }

        } 输出::ggkjjkjkjjsslklkk

        【讨论】:

        猜你喜欢
        • 2015-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 2013-12-25
        • 2016-10-11
        • 1970-01-01
        • 2020-04-02
        相关资源
        最近更新 更多