替换第一个正则表达式匹配组而不是第0个

时间:2018-01-28 12:37:08

标签: regex kotlin

我在期待这个

val string = "hello   , world"
val regex = Regex("""(\s+)[,]""")

println(string.replace(regex, ""))

导致这个:

hello, world

相反,它会打印出来:

hello world

我看到replace功能关心整场比赛。有没有办法只替换第一组而不是第0组?

2 个答案:

答案 0 :(得分:1)

在替换中添加逗号:

val string = "hello   , world"
val regex = Regex("""(\s+)[,]""")

println(string.replace(regex, ","))

或者,如果kotlin支持前瞻:

val string = "hello   , world"
val regex = Regex("""\s+(?=,)""")

println(string.replace(regex, ""))

答案 1 :(得分:0)

您可以使用MatchGroupCollection的groups属性然后使用范围作为String.removeRange方法的参数来检索正则表达式的匹配范围:

val string = "hello   , world"
val regex = Regex("""(\s+)[,]""")
val result = string.removeRange(regex.find(string)!!.groups[1]!!.range)