0Pricing
Go Academy · Lekcja

Wyszukiwanie i wyodrębnianie

FindString i poddopasowania

Wyszukiwanie i wyodrębnianie to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Coś więcej niż dopasowanie

Dopasowanie informuje, czy wzorzec istnieje. Rodzina funkcji Find informuje, co zostało dopasowane i gdzie, dzięki czemu można wyodrębniać dane.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindString("order 42 ready"))
}

FindString

FindString(s) zwraca pierwsze dopasowanie jako ciąg znaków albo pusty ciąg, jeśli go nie znaleziono.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    fmt.Printf("%q\n", re.FindString("123abc456"))
}

FindAllString

FindAllString(s, n) zwraca wszystkie dopasowania w postaci wycinka. Należy przekazać -1, aby uzyskać wszystkie dopasowania, lub dodatni limit.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("a1 b22 c333", -1))
}

Ograniczanie wyników

Należy przekazać dodatnią wartość n, aby zakończyć wyszukiwanie po znalezieniu określonej liczby dopasowań.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("1 2 3 4", 2))
}

Znajdowanie indeksu

FindStringIndex(s) zwraca początkową i końcową pozycję bajtową pierwszego dopasowania w postaci dwulementowego wycinka.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("cat")
    fmt.Println(re.FindStringIndex("a cat here"))
}

Grupy przechwytujące

Nawiasy tworzą grupy przechwytujące. FindStringSubmatch zwraca najpierw całe dopasowanie, a następnie każdą przechwyconą grupę.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+)-(\\d+)")
    m := re.FindStringSubmatch("12-34")
    fmt.Println(m)
}

Korzystanie z wartości poddopasowań

Należy odwoływać się do elementów wycinka poddopasowań według indeksu: element 0 to całe dopasowanie, element 1 to pierwsza grupa itd.

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])
}

Nazwane grupy

Grupę można nazwać za pomocą (?P<name>...), a następnie odczytać jej nazwę przez SubexpNames wraz z wycinkiem poddopasowań.

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])
        }
    }
}

Wszystkie poddopasowania

FindAllStringSubmatch(s, n) zwraca wycinek wycinków poddopasowań — po jednym dla każdego dopasowania. Jest to bardzo przydatne podczas parsowania wielu rekordów.

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])
    }
}

Zachowanie przy braku dopasowania

Gdy nic nie pasuje, metody Find zwracają pusty ciąg znaków albo wycinek nil. Przed użyciem indeksu należy to sprawdzić, aby uniknąć paniki.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    m := re.FindStringSubmatch("no digits")
    fmt.Println(m == nil)
}

Wyodrębnianie rzeczywistych danych

Grupy można łączyć, aby wyodrębniać ustrukturyzowane pola z wiersza tekstu.

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])
}

Szybkie sprawdzenie

Który element wycinka poddopasowań zawiera całe dopasowanie?

Podsumowanie: znajdowanie i wyodrębnianie

Można już wyodrębniać dane z tekstu:

  • FindString i FindAllString zwracają dopasowania.
  • FindStringSubmatch zwraca całe dopasowanie wraz z grupami przechwytującymi.
  • Należy używać nazwanych grup i sprawdzać wartość nil, gdy nie znaleziono dopasowania.
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)@(\\w+)")
    m := re.FindStringSubmatch("user@host")
    fmt.Println(m[1], "at", m[2])
}

Często zadawane pytania

Czy lekcja „Wyszukiwanie i wyodrębnianie” jest bezpłatna?

Tak — pełny tekst „Wyszukiwanie i wyodrębnianie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wyszukiwanie i wyodrębnianie”?

FindString i poddopasowania Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wyszukiwanie i wyodrębnianie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy regexp
  2. Wyszukiwanie i wyodrębnianie
  3. Zastępowanie tekstu
  4. Wskazówki dotyczące wydajności
← Powrót do Go Academy