Метод regexp.Regexp.ExpandString
Метод ExpandString расширяет переданную строку-шаблон,
заменяя в ней специальные конструкции вида $name
или ${name} на соответствующие значения из
найденного совпадения. Первым параметром метод принимает
слайс байт для записи результата, вторым - строку шаблона,
третьим - строку с исходным текстом, четвертым - найденное
совпадение в виде слайса байт.
Синтаксис
re.ExpandString(dst []byte, template string, src string, match []int)
Пример
Давайте используем метод ExpandString для замены
$name на подстроку, найденную по регулярному выражению:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`Hello, (\w+)!`)
src := "Hello, Go!"
match := re.FindStringSubmatchIndex(src)
if match != nil {
dst := []byte("Greeting: $name")
res := re.ExpandString(dst, "Greeting: $name", src, match)
fmt.Println(string(res))
}
}
Результат выполнения кода:
"Greeting: Go"
Пример
Давайте используем метод ExpandString с нумерацией
групп для вставки нескольких значений:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\w+), (\w+)!`)
src := "Hello, Go!"
match := re.FindStringSubmatchIndex(src)
if match != nil {
dst := []byte("")
res := re.ExpandString(dst, "First: $1, Second: $2", src, match)
fmt.Println(string(res))
}
}
Результат выполнения кода:
"First: Hello, Second: Go"
Пример
Давайте используем метод ExpandString с именованными
группами для более читаемого шаблона:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?P<greeting>\w+), (?P<name>\w+)!`)
src := "Hello, Go!"
match := re.FindStringSubmatchIndex(src)
if match != nil {
dst := []byte("")
res := re.ExpandString(dst, "${greeting} to ${name}", src, match)
fmt.Println(string(res))
}
}
Результат выполнения кода:
"Hello to Go"
Пример
Давайте используем метод ExpandString с комбинацией
обычного текста и специальных конструкций:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\d{4})-(\d{2})-(\d{2})`)
src := "2026-09-04"
match := re.FindStringSubmatchIndex(src)
if match != nil {
dst := []byte("")
res := re.ExpandString(dst, "Year: $1, Month: $2, Day: $3", src, match)
fmt.Println(string(res))
}
}
Результат выполнения кода:
"Year: 2026, Month: 09, Day: 04"
Смотрите также
-
метод
Regexp.Expand,
который работает с байтовыми срезами вместо строк -
метод
Regexp.FindStringSubmatchIndex,
который возвращает индексы совпадений для строк -
метод
Regexp.SubexpNames,
который возвращает имена захваченных групп -
метод
Regexp.ReplaceAllString,
который заменяет все совпадения на строку