Вы могли бы подражать, что с регулярным выражением:
re := regexp.MustCompile("(?m)[\r\n]+^.*substring.*$")
res := re.ReplaceAllString(s, "")
(OP Kokizzuwent с "(?m)^.*" +substr+ ".*$[\r\n]+"
)
См this example
func main() {
s := `aaaaa
bbbb
cc substring ddd
eeee
ffff`
re := regexp.MustCompile("(?m)[\r\n]+^.*substring.*$")
res := re.ReplaceAllString(s, "")
fmt.Println(res)
}
выход:
aaaaa
bbbb
eeee
ffff
Обратите внимание на использование regexp flag (?m):
режим многострочный: ^
и $
матч начала/конца строки в дополнение, чтобы начать/конец текста (по умолчанию ложное)
Ответы сильфонные может быть уместным, если вы уже посчастливилось иметь все данные в ломтиком байт, однако, в Go гораздо чаще (и полезно/эффективно/и т. д.), чтобы иметь данные в 'io.Reader' и фильтровать этот поток при чтении/записи. (Например, через '* os.File',' http.Response.Body', 'net.Conn' и т. Д.). –