regex - 使用 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
它不起作用,因为它找不到任何可以替换的东西。
我的代码有什么问题?
解决方案
这是因为您的正则表达式:"^ Grpc__(.*)$"
,^
表示字符串的开头并$
表示字符串的结尾。
此字符串:" Grpc__Client__Service__Target: ${URL}.${PREFIX}.mydomain.com:443"
匹配,因为它以开头Grpc__
和结尾mydomain.com:443
但是 yaml 文件中的字符串以开头variables: ...
和结尾,... -mystage
所以它不匹配。
尝试使用"Grpc__(.*)"
(no ^
and $
),它会起作用。
推荐阅读
- javascript - 是否可以在 jQuery 中使用加载 API 来加载带有类选择器而不是 id 的片段
- node.js - 通过 VSTS 将 webpack/npm 部署到 windows vm 失败
- python - 创建具有多个窗口的 Tkitner 应用程序
- c# - 实体框架中的类型转换问题
- ruby - 如何忽略连续括号/大括号的 Rubocop 布局/MultilineArrayBraceLayout 规则?
- c# - 将图像复制到另一个文件夹
- asp.net-web-api2 - Using a Web API to perform 2 DB operations
- javascript - 将输入元素值 (php) 传递给 Sweetalert javascript
- php - Apache2 中的 Angularjs 和 Laravel 配置
- python - 从 DataFrame 的同一行中的其他值有条件地更新新值的方法背后的熊猫推理