替换多行字符串中的版本
Replace version in multiline string
我正在尝试替换文件中图表名称的版本,并构建了以下经过精简的示例。但没有任何东西被取代。知道我做错了什么吗?
val content = """releases:
web-env:
version: 1.7.0
enabled: true
web-app:
enabled: true
version: 1.39.0
"""
val chart = "web-env"
val version = "new version"
val regex = "($chart:.*version: )(.*)\n".toRegex(MULTILINE)
val replace = content.replaceFirst(regex, "$version")
println(replace)
您在代码中的 MULTILINE
出错并且无法正常工作。可能是因为缺少一些导入,但我根本不了解 Kotlin。但似乎 MULTILINE
也像 DOTALL
一样启用点匹配换行符。你的正则表达式中的 .*
是贪婪的,所以即使我让你的正则表达式工作,它也会替换你文本中的第二个版本,因此你应该在你的正则表达式中使用非贪婪版本 [\w\W]*?
和 \S+
匹配一个或多个非 space 字符并将匹配 1.7.0
尽管如果你只想精确匹配数字版本,你甚至可以将其写成 \d+(\.\d+)*
。
我已从您的代码中删除了 MULTILINE
并更正了正则表达式,这似乎工作正常。查看此修改后的代码,
fun main(args: Array<String>) {
val content = """releases:
web-env:
version: 1.7.0
enabled: true
web-app:
enabled: true
version: 1.39.0
"""
val chart = "web-env"
val version = "new version"
val regex = "($chart:[\w\W]*?version: )(\S+)".toRegex()
val replace = content.replaceFirst(regex, "$version")
println(replace)
}
注意:[\w\W]
是另一种启用匹配任何字符(包括换行符)的方法。
这将打印以下输出,这正是我猜您所期望的,
releases:
web-env:
version: new version
enabled: true
web-app:
enabled: true
version: 1.39.0
希望这一切正常,如有任何问题请告诉我。
我正在尝试替换文件中图表名称的版本,并构建了以下经过精简的示例。但没有任何东西被取代。知道我做错了什么吗?
val content = """releases:
web-env:
version: 1.7.0
enabled: true
web-app:
enabled: true
version: 1.39.0
"""
val chart = "web-env"
val version = "new version"
val regex = "($chart:.*version: )(.*)\n".toRegex(MULTILINE)
val replace = content.replaceFirst(regex, "$version")
println(replace)
您在代码中的 MULTILINE
出错并且无法正常工作。可能是因为缺少一些导入,但我根本不了解 Kotlin。但似乎 MULTILINE
也像 DOTALL
一样启用点匹配换行符。你的正则表达式中的 .*
是贪婪的,所以即使我让你的正则表达式工作,它也会替换你文本中的第二个版本,因此你应该在你的正则表达式中使用非贪婪版本 [\w\W]*?
和 \S+
匹配一个或多个非 space 字符并将匹配 1.7.0
尽管如果你只想精确匹配数字版本,你甚至可以将其写成 \d+(\.\d+)*
。
我已从您的代码中删除了 MULTILINE
并更正了正则表达式,这似乎工作正常。查看此修改后的代码,
fun main(args: Array<String>) {
val content = """releases:
web-env:
version: 1.7.0
enabled: true
web-app:
enabled: true
version: 1.39.0
"""
val chart = "web-env"
val version = "new version"
val regex = "($chart:[\w\W]*?version: )(\S+)".toRegex()
val replace = content.replaceFirst(regex, "$version")
println(replace)
}
注意:[\w\W]
是另一种启用匹配任何字符(包括换行符)的方法。
这将打印以下输出,这正是我猜您所期望的,
releases:
web-env:
version: new version
enabled: true
web-app:
enabled: true
version: 1.39.0
希望这一切正常,如有任何问题请告诉我。