Замена текста
Заменяйте по шаблонам ReplaceAll
«Замена текста» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Замена по шаблону
Регулярные выражения могут не только находить текст, но и изменять его. ReplaceAllString заменяет каждое совпадение строкой-заменой.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.ReplaceAllString("a1b2c3", "#"))
}Замена целых слов
Шаблон вроде cat|dog позволяет заменить несколько вариантов за один проход.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("cat|dog")
fmt.Println(re.ReplaceAllString("my cat and dog", "pet"))
}Свёртывание пробелов
Распространённый способ очистки: заменить последовательности пробельных символов одним пробелом с помощью \s+.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("\\s+")
fmt.Println(re.ReplaceAllString("too many spaces", " "))
}Ссылки на группы
В строке замены $1 вставляет первую группу захвата, а $2 — вторую. Так можно переставлять совпавшие части.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(\\d+)-(\\d+)")
fmt.Println(re.ReplaceAllString("12-34", "$2-$1"))
}Именованные ссылки на группы
С именованными группами для ясности можно использовать ${name} в замене.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(?P<y>\\d{4})-(?P<m>\\d{2})")
fmt.Println(re.ReplaceAllString("2026-05", "${m}/${y}"))
}Безопасные фигурные скобки
Используйте фигурные скобки ${1}, если после ссылки на группу идёт текст, чтобы $1 не приняли за начало более длинного имени.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(\\d+)")
fmt.Println(re.ReplaceAllString("7", "${1}px"))
}Буквальная замена
ReplaceAllLiteralString игнорирует ссылки $ и вставляет замену в точности так, как она записана.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.ReplaceAllLiteralString("a1", "$money"))
}Замена с помощью функции
ReplaceAllStringFunc вызывает Вашу функцию для каждого совпадения и подставляет всё, что она возвращает. Это позволяет вычислять замены.
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
re := regexp.MustCompile("[a-z]+")
out := re.ReplaceAllStringFunc("go is fun", strings.ToUpper)
fmt.Println(out)
}Вычисляемая замена
Внутри функции можно преобразовать каждое совпадение как угодно; здесь каждая найденная последовательность цифр удваивается за счёт оборачивания.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
out := re.ReplaceAllStringFunc("id5 and id9", func(m string) string {
return "<" + m + ">"
})
fmt.Println(out)
}Маскирование конфиденциальных данных
Практическое применение: перед записью в журнал скрывайте числа, например последовательности цифр, похожие на номера карт.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("\\d{4}")
fmt.Println(re.ReplaceAllString("card 1234 5678", "****"))
}Работа с байтами
Существуют и варианты для срезов байтов, например ReplaceAll; они повторяют методы для строк при работе с двоичными данными или буферами.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
out := re.ReplaceAll([]byte("a1b2"), []byte("#"))
fmt.Println(string(out))
}Быстрая проверка
Как вставить первую группу захвата в строку замены?
Итоги: замена текста
Вы научились изменять текст:
ReplaceAllStringзаменяет совпадения;$1/${name}позволяют ссылаться на группы.ReplaceAllLiteralStringне выполняет подстановку ссылок.ReplaceAllStringFuncвычисляет каждую замену.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(\\w+)\\s(\\w+)")
fmt.Println(re.ReplaceAllString("Ada Lovelace", "$2, $1"))
}Часто задаваемые вопросы
Урок «Замена текста» бесплатный?
Да — полный текст урока «Замена текста» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Замена текста»?
Заменяйте по шаблонам ReplaceAll Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Замена текста»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.