Merkkien poistaminen vastaavan mallin mukaan

Go:
Merkkien poistaminen vastaavan mallin mukaan

Kuinka:

Go-kielessä merkkien poistaminen, jotka täsmäävät malliin, voidaan suorittaa tehokkaasti käyttäen regexp-pakettia. Tässä näytämme, kuinka kaikki numerot poistetaan ja sitten kaikki ei-alfanumeeriset merkit merkkijonosta esimerkkeinä.

  1. Kaikkien numeroiden poistaminen:
package main

import (
    "fmt"
    "regexp"
)

func main() {
    text := "Go1 on viileä, mutta Go2 tulee olemaan viileämpi! Nyt: 2023."
	
    // Kompiloi säännöllinen lauseke numeroille
    re, err := regexp.Compile("[0-9]+")
    if err != nil {
        fmt.Println("Virhe kompiloidessa regexiä:", err)
        return
    }
	
    // Korvaa numerot tyhjällä merkkijonolla
    result := re.ReplaceAllString(text, "")
	
    fmt.Println(result) // Tuloste: Go on viileä, mutta Go tulee olemaan viileämpi! Nyt: .
}
  1. Kaikkien ei-alfanumeeristen merkkien poistaminen:
package main

import (
    "fmt"
    "regexp"
)

func main() {
    text := "Go on #1 @ ohjelmointikielet!"
	
    // Kompiloi säännöllinen lauseke ei-alfanumeerisille merkeille
    re, err := regexp.Compile("[^a-zA-Z0-9]+")
    if err != nil {
        fmt.Println("Virhe kompiloidessa regexiä:", err)
        return
    }
	
    // Korvaa ei-alfanumeeriset merkit tyhjällä merkkijonolla
    result := re.ReplaceAllString(text, "")
	
    fmt.Println(result) // Tuloste: Goon1ohjelmointikielet
}

Syväsukellus

Go:n regexp-paketti tarjoaa tehokkaan rajapinnan mallien vastaavuuden tarkistamiseen ja manipulointiin säännöllisten lausekkeiden avulla. Sen toteutus perustuu RE2:een, säännöllisten lausekkeiden kirjastoon, joka on suunniteltu takaamaan lineaarinen suoritusaika ja välttämään “katastrofaalisen takaisinkytkennän” ongelmat, jotka ovat läsnä joissakin muissa regex-moottoreissa. Tämä tekee Go:n regexistä suhteellisen turvallisen ja tehokkaan laajan valikoiman sovelluksia varten.

Vaikka regexp-paketti on kattava ratkaisu mallien käsittelyyn, on syytä huomata, että yksinkertaisempiin tai erittäin spesifisiin merkkijonomanipulaatioihin muut merkkijonofunktiot, kuten strings.Replace(), strings.Trim() tai leikkaaminen, saattavat tarjota tehokkaampia vaihtoehtoja. Säännölliset lausekkeet ovat tehokas työkalu, mutta niiden suhteellinen laskennallinen kustannus tarkoittaa, että operaatioille, jotka voidaan määritellä ilman niitä, vakio kirjaston vaihtoehtojen tutkiminen voi joskus johtaa yksinkertaisempaan ja tehokkaampaan koodiin.