Метод regexp.Regexp.ReplaceAllStringFunc
Метод ReplaceAllStringFunc интерфейса Regexp выполняет замену всех подстрок в строке,
которые соответствуют регулярному выражению. В отличие от ReplaceAllString,
где замена статична, этот метод принимает пользовательскую функцию,
которая определяет, на что заменить каждое найденное совпадение.
Метод получает исходную строку и функцию, которая для каждой найденной подстроки
возвращает строку замены.
Синтаксис
re.ReplaceAllStringFunc(src string, repl func(string) string) string
Пример
Давайте заменим все цифры в строке на их квадраты:
package 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)
}
Результат выполнения кода:
"a1b4c9"
Пример
Давайте заменим все найденные слова на их длину:
package 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)
}
Результат выполнения кода:
"5 5 2"
Пример
Давайте преобразуем все найденные буквенные последовательности в верхний регистр:
package 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)
}
Результат выполнения кода:
"HELLO WORLD"
Смотрите также
-
метод
ReplaceAllFunc,
который работает с байтовыми срезами -
метод
ReplaceAllString,
который заменяет все совпадения на статическую строку -
метод
ReplaceAllLiteralString,
который заменяет все совпадения на литеральную строку -
метод
FindAllString,
который находит все совпадения с регулярным выражением