Go:
Видалення символів за зразком
Як:
У Go видалення символів, що відповідають паттерну, можна ефективно виконати за допомогою пакета regexp
. Тут ми покажемо, як видалити всі цифри, а потім всі не алфанумеричні символи з рядка як приклад.
- Видалення всіх цифр:
package main
import (
"fmt"
"regexp"
)
func main() {
text := "Go1 є класним, але Go2 буде крутішим! Зараз: 2023."
// Компілюємо регулярний вираз для цифр
re, err := regexp.Compile("[0-9]+")
if err != nil {
fmt.Println("Помилка компіляції regex:", err)
return
}
// Замінюємо цифри на пустий рядок
result := re.ReplaceAllString(text, "")
fmt.Println(result) // Вивід: Go є класним, але Go буде крутішим! Зараз: .
}
- Видалення всіх не алфанумеричних символів:
package main
import (
"fmt"
"regexp"
)
func main() {
text := "Go є #1 @ мовами програмування!"
// Компілюємо регулярний вираз для не алфанумеричних символів
re, err := regexp.Compile("[^a-zA-Z0-9]+")
if err != nil {
fmt.Println("Помилка компіляції regex:", err)
return
}
// Замінюємо не алфанумеричні символи на пустий рядок
result := re.ReplaceAllString(text, "")
fmt.Println(result) // Вивід: Goє1мовамипрограмування
}
Поглиблений огляд
Пакет regexp
в Go надає потужний інтерфейс для пошуку відповідностей за шаблоном і маніпулювання з регулярними виразами. Його реалізація походить з RE2, бібліотеки регулярних виразів, спроектованої для гарантування виконання у лінійний час, уникаючи можливості проблем “катастрофічного відстежування”, присутніх в деяких інших регулярних виразах. Це робить регулярні вирази Go відносно безпечними та ефективними для широкого спектра застосувань.
Хоча пакет regexp
є всебічним рішенням для роботи з паттернами, варто зауважити, що для простіших або високоспецифічних маніпуляцій з рядками, інші функції рядків, такі як strings.Replace()
, strings.Trim()
або зрізання, можуть пропонувати більш продуктивні альтернативи. Регулярні вирази - потужний інструмент, але їх відносна обчислювальна витратність означає, що для операцій, які можуть бути вказані без них, дослідження альтернатив стандартної бібліотеки іноді може вести до простішого та ефективнішого коду.