gpt4 book ai didi

regex - 用regexp替换yaml结构中的版本

转载 作者:行者123 更新时间:2023-12-02 12:49:34 26 4
gpt4 key购买 nike

我正在尝试在以下yaml结构中替换version属性的值。
我使用正则表达式而不是解析yaml的原因是我需要再次写回它。如果我解析它然后写回,它将失去它的现有格式。

environments:
local:
values:
- kubeContext: default
- surfScreenshotter:
installed: false
version: 0
- whoamiMn:
installed: false
version: 0
dev:
values:
- kubeContext: nuc
- surfScreenshotter:
installed: false
version: 0
- whoamiMn:
installed: false
version: 0
我的Kotlin代码
val regex = """environments:
|.*
| $environment:
| values:
|.*
| - $projectName:
|.*
| {10}version: (\S+)
""".trimMargin().toRegex(MULTILINE)
val updatedHelmfile = regex.replaceFirst(helmfileContent, version)
$ environment可以是“local”或“dev”,而projectName可以是“surfScreenshotter”或“whoamiMn”。
没有匹配的东西。有人知道如何进行这项工作吗?

最佳答案

您可以依靠缩进来确保您位于文本块的右侧,并在将版本捕获到捕获组之前捕获整个部分:

val regex = """(environments:
|(?:\R\h{2}.*)*?\R\h{2}$environment:
|(?:\R\h{4}.*)*?\R\h{6}-\h*$projectName:
|(?:\R\h{10}.*)*?\R\h{10}
|version:\h*)\S+
""".trimMargin().toRegex(RegexOption.COMMENTS)
然后,您需要确保使用替换模式中的 $1还原第1组的内容:
val updatedHelmfile = regex.replaceFirst(helmfileContent, "$1" + version)
参见 regex demoKotlin demo
详细信息
  • (environments:-第1组开始和environments:字符串
  • (?:\R\h{2}.*)*?\R\h{2}dev:-出现零次或多次(尽可能少)的换行符,然后出现两个水平空白,然后是该行的其余部分,然后是一个换行符,两个水平空白和dev:字符串
  • (?:\R\h{4}.*)*?\R\h{6}-\h*whoamiMn:-出现零次或多次(尽可能少)的换行符,后跟四个水平空白,然后是该行的其余部分,然后是一个换行符,六个水平空白和- + 0个或更多空格,然后是whoamiMn:字符串
  • (?:\R\h{10}.*)*?\R\h{10}-零次或更多次出现换行符(尽可能少),然后是十个水平空白,然后是该行的其余部分,然后是一个换行符,十个水平空白
  • version:\h*)-version:,0个或多个空格,第1组的结尾
  • \S+-一个或多个非空白字符。
  • 关于regex - 用regexp替换yaml结构中的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64298492/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com