首页 > 解决方案 > 使用 Go 删除​​ yaml 文件中与正则表达式匹配的行

问题描述

我有以下 yamlmyfile.yml文件:

variables:
  PYTHONUNBUFFERED: 1
  GIT_STRATEGY: clone
  Grpc__Client__Service__Target: ${URL}.${PREFIX}.mydomain.com:443

include:
  - project: "myproject"
    file: "/test.yml"

stages:
  - mystage

我想删除以“ Grpc”开头的行

我的代码:

package main

import (
    "fmt"
    "io/ioutil"
    "strings"
    "regexp"
)

func main() {

    filename := "myfile.yml"

    content, err := ioutil.ReadFile(filename)
    check(errReadFile)

    if err != nil {
      panic(err)
    }

    m := regexp.MustCompile("^  Grpc__(.*)$") 
    grpcRemoved := m.ReplaceAllString(string(content), "")
    fmt.Println(grpcRemoved)
}

最后,什么都没有被删除。

我使用 测试了我的正则表达式MatchString,它返回true

matchString, _ := regexp.MatchString("^  Grpc__(.*)$", "  Grpc__Client__Service__Target: ${URL}.${PREFIX}.mydomain.com:443")

matchStringFile, _ := regexp.MatchString("^  Grpc__(.*)$", string(content))

返回false,这不是我所期望的。然后我想ReplaceAllString它不起作用,因为它找不到任何可以替换的东西。

我的代码有什么问题?

标签: regexgo

解决方案


这是因为您的正则表达式:"^ Grpc__(.*)$"^表示字符串的开头并$表示字符串的结尾。

此字符串:" Grpc__Client__Service__Target: ${URL}.${PREFIX}.mydomain.com:443"匹配,因为它以开头Grpc__和结尾mydomain.com:443

但是 yaml 文件中的字符串以开头variables: ...和结尾,... -mystage所以它不匹配。

尝试使用"Grpc__(.*)"(no ^and $),它会起作用。


推荐阅读