Ricerca ed estrazione
FindString e sottocorrispondenze
Ricerca ed estrazione è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Oltre il match
Il matching indica se esiste una corrispondenza. La famiglia di funzioni Find indica che cosa ha trovato e dove, consentendo di estrarre dati.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.FindString("order 42 ready"))
}FindString
FindString(s) restituisce la prima corrispondenza come stringa oppure una stringa vuota se non ne trova nessuna.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[a-z]+")
fmt.Printf("%q\n", re.FindString("123abc456"))
}FindAllString
FindAllString(s, n) restituisce tutte le corrispondenze come slice. Passi -1 per ottenere tutte le corrispondenze oppure un limite positivo.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.FindAllString("a1 b22 c333", -1))
}Limitazione dei risultati
Passi un valore positivo per n per interrompere la ricerca dopo quel numero di corrispondenze.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.FindAllString("1 2 3 4", 2))
}Ricerca dell'indice
FindStringIndex(s) restituisce le posizioni iniziale e finale, espresse in byte, della prima corrispondenza come slice di due elementi.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("cat")
fmt.Println(re.FindStringIndex("a cat here"))
}Gruppi di cattura
Le parentesi creano gruppi di cattura. FindStringSubmatch restituisce prima la corrispondenza completa, quindi ogni gruppo catturato.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(\\d+)-(\\d+)")
m := re.FindStringSubmatch("12-34")
fmt.Println(m)
}Utilizzo dei valori dei submatch
Acceda agli elementi della slice dei submatch: l'elemento 0 è la corrispondenza completa, l'elemento 1 è il primo gruppo e così via.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(\\d+):(\\d+)")
m := re.FindStringSubmatch("09:30")
fmt.Println("hour", m[1], "min", m[2])
}Gruppi denominati
Assegni un nome a un gruppo con (?P<name>...), quindi lo legga tramite SubexpNames insieme alla slice dei submatch.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(?P<area>\\d{3})-(?P<num>\\d{4})")
m := re.FindStringSubmatch("555-1234")
for i, name := range re.SubexpNames() {
if name != "" {
fmt.Println(name, m[i])
}
}
}Tutti i submatch
FindAllStringSubmatch(s, n) restituisce una slice di slice di submatch, una per ogni corrispondenza. È ideale per analizzare molti record.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(\\w+)=(\\d+)")
all := re.FindAllStringSubmatch("x=1 y=2", -1)
for _, m := range all {
fmt.Println(m[1], m[2])
}
}Comportamento in assenza di corrispondenze
Quando non viene trovata alcuna corrispondenza, i metodi Find restituiscono una stringa vuota o una slice nil. Controlli il risultato prima di accedere agli elementi per evitare un panic.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
m := re.FindStringSubmatch("no digits")
fmt.Println(m == nil)
}Estrazione di dati reali
Combini i gruppi per estrarre campi strutturati da una riga di testo.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(\\d{4})-(\\d{2})-(\\d{2})")
m := re.FindStringSubmatch("date: 2026-05-30")
fmt.Println("year", m[1])
}Verifica rapida
Quale elemento di una slice dei submatch contiene la corrispondenza completa?
Riepilogo: ricerca ed estrazione
Ora può estrarre dati dal testo:
FindStringeFindAllStringrestituiscono le corrispondenze.FindStringSubmatchrestituisce la corrispondenza completa insieme ai gruppi di cattura.- Utilizzi gruppi denominati e controlli
nilquando non viene trovata alcuna corrispondenza.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(\\w+)@(\\w+)")
m := re.FindStringSubmatch("user@host")
fmt.Println(m[1], "at", m[2])
}Domande Frequenti
La lezione «Ricerca ed estrazione» è gratuita?
Sì — il testo completo di «Ricerca ed estrazione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Ricerca ed estrazione»?
FindString e sottocorrispondenze Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Ricerca ed estrazione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Nozioni di base su regexp
- Ricerca ed estrazione
- Sostituire il testo
- Consigli sulle prestazioni