那么,如何在 groovy(或 java)中做到这一点?我寻找这样的东西:
someString.replaceN(/(?<=\p{L}) (?=\p{L})/, '', 3) // replace first 3 matches
目前,我只找到了这个愚蠢的解决方案:
(0..2).each { s = s.replaceFirst(/(?<=\p{L}) (?=\p{L})/, '') }
<小时/>
在其他语言中,这很简单:
- Python - subn(count=3)
- PHP - preg_replace(limit=3)
- 生锈 - Regex.replacen
最佳答案
我认为你所追求的是
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)
关于java - 如何替换字符串中的 N 个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39371610/