Метод regexp.Regexp.ReplaceAllStringFunc

Метод ReplaceAllStringFunc интерфейса Regexp выполняет замену всех подстрок в строке, которые соответствуют регулярному выражению. В отличие от ReplaceAllString, где замена статична, этот метод принимает пользовательскую функцию, которая определяет, на что заменить каждое найденное совпадение. Метод получает исходную строку и функцию, которая для каждой найденной подстроки возвращает строку замены.

Синтаксис

gore.ReplaceAllStringFunc(src string, repl func(string) string) string

Пример

Давайте заменим все цифры в строке на их квадраты:

gopackage main

import (
  "fmt"
  "regexp"
  "strconv"
)

func main() {
  re := regexp.MustCompile(`\d`)
  res := re.ReplaceAllStringFunc("a1b2c3", func(s string) string {
    num, _ := strconv.Atoi(s)
    return strconv.Itoa(num * num)
  })
  fmt.Println(res)
}

Результат выполнения кода:

go"a1b4c9"

Пример

Давайте заменим все найденные слова на их длину:

gopackage main

import (
  "fmt"
  "regexp"
  "strconv"
)

func main() {
  re := regexp.MustCompile(`[a-z]+`)
  res := re.ReplaceAllStringFunc("hello world go", func(s string) string {
    return strconv.Itoa(len(s))
  })
  fmt.Println(res)
}

Результат выполнения кода:

go"5 5 2"

Пример

Давайте преобразуем все найденные буквенные последовательности в верхний регистр:

gopackage main

import (
  "fmt"
  "regexp"
  "strings"
)

func main() {
  re := regexp.MustCompile(`[a-z]+`)
  res := re.ReplaceAllStringFunc("hello world", func(s string) string {
    return strings.ToUpper(s)
  })
  fmt.Println(res)
}

Результат выполнения кода:

go"HELLO WORLD"

Смотрите также

  • метод ReplaceAllFunc,
    который работает с байтовыми срезами
  • метод ReplaceAllString,
    который заменяет все совпадения на статическую строку
  • метод ReplaceAllLiteralString,
    который заменяет все совпадения на литеральную строку
  • метод FindAllString,
    который находит все совпадения с регулярным выражением