kotlin 中的正面回顾在比赛中不起作用

positive lookbehind in kotlin doesn't work in match

我正在迭代此文件:

[INFO] com.demo:communication:jar:3.5.0-SNAPSHOT
[INFO] +- com.cellwize.optserver:optserver-admin:jar:3.5.0-SNAPSHOT:compile
[INFO] |  +- org.apache.logging.log4j:log4j-api:jar:2.7:compile
[INFO] |  +- org.apache.logging.log4j:log4j-core:jar:2.7:compile
[INFO] |  |  \- (org.apache.logging.log4j:log4j-api:jar:2.7:compile - omitted for duplicate)
[INFO] |  +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.7:compile
[INFO] |  |  +- org.slf4j:slf4j-api:jar:1.7.21:compile
[INFO] |  |  \- (org.apache.logging.log4j:log4j-api:jar:2.7:compile - omitted for duplicate)

我想删除每一行的所有前缀:“[INFO]”/“[INFO] +-”/“[INFO] | | -”等

我正在使用我在文件的每一行上写的这个函数:

private fun extractDependency(raw: String): Dependency {
    val uniqueDependencyRegex = Regex.fromLiteral("(?<=\+- ).*")
    val duplicateDependencyRegex = Regex.fromLiteral("(?<=\().+?(?=\))")
    val projectRegex = Regex.fromLiteral("(?<=\[INFO\] ).*")
when {
    uniqueDependencyRegex matches raw -> {
        val matchResult = uniqueDependencyRegex.matchEntire(raw)
        println(matchResult)
    }
    duplicateDependencyRegex matches raw -> {
        val matchResult = duplicateDependencyRegex.matchEntire(raw)
        println(matchResult)
    }
    projectRegex matches raw -> {
        val matchResult = projectRegex.matchEntire(raw)
        println(matchResult)
    }
    else -> {
        //TODO - throw exception
    }
}

return Dependency("test", "test", "test", "test")
}

我希望它在我测试正则表达式后能正常工作:

第一个条件

第二个条件

第三个条件

我想要的结果是:

com.demo:communication:jar:3.5.0-SNAPSHOT
com.cellwize.optserver:optserver-admin:jar:3.5.0-SNAPSHOT:compile
org.apache.logging.log4j:log4j-api:jar:2.7:compile
org.apache.logging.log4j:log4j-core:jar:2.7:compile
org.apache.logging.log4j:log4j-api:jar:2.7:compile - omitted for duplicate
org.apache.logging.log4j:log4j-slf4j-impl:jar:2.7:compile
org.slf4j:slf4j-api:jar:1.7.21:compile
org.apache.logging.log4j:log4j-api:jar:2.7:compile - omitted for duplicate

您可以匹配 [INFO] 后跟将匹配任何列出的字符 [| +\(-] 的字符 class,或者匹配字符串末尾的 ) .

在替换中使用空字符串。

^\[INFO\][| +\(-]+|\)$

使用双转义反斜杠

^\[INFO\][| +\\(-]+|\)$

regex demo


更精确的模式可以重复匹配任何出现的模式,如 | +- \- 并在可选括号之间捕获组 1 中的内容。然后在替换中使用组。

^\[INFO\](?:(?: +(?:\||\+-|\-))+)? +\(?(.*?)\)?$

Regex demo