如何替换字符串中的N个匹配项?

时间:2016-09-07 13:44:48

标签: java groovy

那么,如何在groovy(或java)中做到这一点?我寻找这样的东西:

someString.replaceN(/(?<=\p{L}) (?=\p{L})/, '', 3) // replace first 3 matches

目前,我只是遇到了这个愚蠢的解决方案:

(0..2).each { s = s.replaceFirst(/(?<=\p{L}) (?=\p{L})/, '') }

在其他语言中,这很简单:

1 个答案:

答案 0 :(得分:1)

我认为你所追求的是

3.times { s = s.replaceFirst(/(?<=\p{L}) (?=\p{L})/, '') }

或者,如果您经常需要它,您也可以轻松地将方法添加到String类,如

String.metaClass.replace << { pattern, replacement, n ->
    def result = delegate
    n.times { result = result.replaceFirst pattern, replacement }
    result
}

someString.replace(/(?<=\p{L}) (?=\p{L})/, '', 3)