我正在尝试用Go编写一个将foobar
替换为foobaz
的函数,但前提是bar
之前是foo
。在我看来,regexp.ReplaceAll
函数和正向后看(参见regexp.ReplaceAll
)将对此起作用,因此我尝试了以下操作:
https://www.regular-expressions.info/lookaround.html
目标是使该程序打印为package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?<=foo)bar`)
new := re.ReplaceAll([]byte("foobar"), []byte("baz"))
fmt.Println(string(new))
}
,但由于正则表达式无法编译,我感到恐慌:
foobaz
我该如何进行这项工作?
我尝试过的一件事是用非捕获组替换正则表达式:
panic: regexp: Compile(`(?<=foo)bar`): error parsing regexp: invalid or unsupported Perl syntax: `(?<`
但是,我发现程序然后根据需要打印了re := regexp.MustCompile(`(?:foo)bar`)
而不是baz
。
看起来您的问题只是静态字符串替换。可以简单地通过foobaz
但是如果您想向后看:
Go的strings.Replace程序包不支持向后看,您可以在此处检查支持的功能:regexp
如果您确实需要向后看,则应尝试使用第三方模块,例如:https://github.com/google/re2/wiki/Syntax