gpt4 book ai didi

regex - 如何将正则表达式应用于文件中的内容(Go)?

转载 作者:IT王子 更新时间:2023-10-29 01:24:55 25 4
gpt4 key购买 nike

我正在使用 io/ioutil 包来读取文件:

package main

import (
"fmt"
"github.com/codegangsta/cli"
"io/ioutil"
"os"
"regexp"
)

func main() {
app := cli.NewApp()
app.Name = "m2k"
app.Usage = "convert markdown to kindle"

app.Action = func(c *cli.Context) {
file := "no file"

if len(c.Args().First()) > 0 {
file = c.Args().First()

fmt.Println("worked:", file)

b, err := ioutil.ReadFile(file)
if err != nil {
panic(err)
}

r, _ := regexp.Compile(b)
fmt.Println(r.ReplaceAllString("oldtext", "newtext"))
}

}

app.Run(os.Args)
}

// $ go run io2.go input.txt

// input.txt

// text text oldtext oldtext

我想将正则表达式应用于文件的内容:

r, _ := regexp.Compile(b)
mt.Println(r.ReplaceAllString("oldtext", "newtext"))

问题是 regexp.Compile 似乎不适用于 byte 类型:

./io2.go:29: cannot use b (type []byte) as type string in function argument

我该如何解决这个问题?

最佳答案

正则表达式替换方法返回源参数,正则表达式匹配替换为替换参数。因为应用程序正在用“新文本”替换“旧文本”,所以“旧文本”是正则表达式:

r, err := regexp.Compile("oldtext")

因为应用程序将文件内容作为 [] 字节,所以可以使用 ReplaceAll 代替 ReplaceAllString。这确实需要将替换字符串转换为 [] 字节,但这可能比将文件转换为 ReplaceAllString 的字符串更便宜。

r.ReplaceAll(b, []byte("newtext"))

ReplaceAll 的结果是一个可以直接写入标准输出的 []byte。无需 fmt.Println 输出。

完整代码如下:

b, err := ioutil.ReadFile(file)
if err != nil {
panic(err)
}

r, err := regexp.Compile("oldtext")
if err != nil {
// handle error
}
os.Stdout.Write(r.ReplaceAll(b, []byte("newtext")))

关于regex - 如何将正则表达式应用于文件中的内容(Go)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28574609/

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