regexp.Regexp.Split în Go

Împarte textul în bucăți acolo unde se potrivește expresia regulată, de exemplu după orice combinație de virgule și spații.

Sintaxă
func (re *Regexp) Split(s string, n int) []string

Ce face regexp.Regexp.Split

re.Split(s, n) taie textul la fiecare potrivire a expresiei și returnează bucățile dintre ele. Este ca strings.Split, dar separatorul poate fi un tipar: „virgulă sau punct și virgulă, urmate de oricâte spații”.

n limitează numărul de bucăți: -1 înseamnă toate, 0 returnează nil, iar un număr pozitiv dă cel mult atâtea bucăți (ultima conține restul). Dacă textul începe sau se termină cu un separator, apar bucăți goale la capete.

Parametri

Parametru Descriere
s Textul de împărțit.
n Numărul maxim de bucăți (-1 = toate).

Ce returnează

Un slice []string cu bucățile.

Exemple

Exemplul 1: Separatori amestecați

package main

import (
	"fmt"
	"regexp"
)

func main() {
	re := regexp.MustCompile(`\s*[,;]\s*`)
	fmt.Printf("%q\n", re.Split("Iași, Cluj;Brașov ,  Timișoara", -1))
	fmt.Printf("%q\n", re.Split("Iași, Cluj;Brașov ,  Timișoara", 2))
	fmt.Printf("%q\n", re.Split(", Iași,", -1))
}

Rezultat

["Iași" "Cluj" "Brașov" "Timișoara"]
["Iași" "Cluj;Brașov ,  Timișoara"]
["" "Iași" ""]

Exemplul 2: Propoziții dintr-un text

package main

import (
	"fmt"
	"regexp"
)

func main() {
	re := regexp.MustCompile(`[.!?]+\s*`)
	text := "Bună ziua! Ce mai faci? Eu sunt bine... Mulțumesc."
	for i, p := range re.Split(text, -1) {
		if p != "" {
			fmt.Printf("%d: %s\n", i+1, p)
		}
	}
}

Rezultat

1: Bună ziua
2: Ce mai faci
3: Eu sunt bine
4: Mulțumesc

Greșeli frecvente

  • Uiți de bucățile goale de la capete când textul începe sau se termină cu separator. Filtrează-le sau curăță textul înainte cu strings.Trim.
  • Folosești regexp.Split pentru un separator fix. strings.Split este mai simplu și mai rapid; pentru spații, strings.Fields.

Comenzi înrudite

  • strings.Split: Împarte textul în bucăți după un separator exact; SplitN limitează numărul de bucăți, SplitAfter păstrează separatorul.
  • strings.Fields: Împarte textul în cuvinte după spații (oricâte, inclusiv tab și rând nou); FieldsFunc după o condiție a ta.
  • regexp.Regexp: O expresie regulată compilată: o creezi o dată cu Compile sau MustCompile și o folosești de oricâte ori (MatchString, Find…, Replace…).