那么,如何在groovy(或java)中做到这一点?我寻找这样的东西:
someString.replaceN(/(?<=\p{L}) (?=\p{L})/, '', 3) // replace first 3 matches
目前,我只是遇到了这个愚蠢的解决方案:
(0..2).each { s = s.replaceFirst(/(?<=\p{L}) (?=\p{L})/, '') }
在其他语言中,这很简单:
答案 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)