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\][| +\\(-]+|\)$
更精确的模式可以重复匹配任何出现的模式,如 |
或 +-
或 \-
并在可选括号之间捕获组 1 中的内容。然后在替换中使用组。
^\[INFO\](?:(?: +(?:\||\+-|\-))+)? +\(?(.*?)\)?$
我正在迭代此文件:
[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\][| +\\(-]+|\)$
更精确的模式可以重复匹配任何出现的模式,如 |
或 +-
或 \-
并在可选括号之间捕获组 1 中的内容。然后在替换中使用组。
^\[INFO\](?:(?: +(?:\||\+-|\-))+)? +\(?(.*?)\)?$