regex - lenguaje - Dividir cadena usando expresiones regulares en Go
lenguaje de expresiones regulares (5)
Soy realmente nuevo en Go y lo he estado disfrutando hasta ahora. Estoy tratando de encontrar una buena manera de dividir una cadena usando una expresión regular en lugar de una cadena. Gracias
Debería poder crear su propia función de división que recorre los resultados de RegExp.FindAllString, colocando las subcadenas intermedias en una nueva matriz.
http://nsf.github.com/go/regexp.html?m:Regexp.FindAllString !
Hice una función de división de expresiones regulares basada en el comportamiento de la función de división de expresiones regulares en java, c #, php ... Solo devuelve una matriz de cadenas, sin la información del índice.
func RegSplit(text string, delimeter string) []string {
reg := regexp.MustCompile(delimeter)
indexes := reg.FindAllStringIndex(text, -1)
laststart := 0
result := make([]string, len(indexes) + 1)
for i, element := range indexes {
result[i] = text[laststart:element[0]]
laststart = element[1]
}
result[len(indexes)] = text[laststart:len(text)]
return result
}
ejemplo:
fmt.Println(RegSplit("a1b22c333d", "[0-9]+"))
resultado:
[a b c d]
La función regexp.Split() sería la mejor manera de hacer esto.
Use regexp.Split
para dividir la cadena en una porción de cadenas con el patrón como delimitador.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
txt := "Have9834a908123great10891819081day!"
split := re.Split(txt, -1)
set := []string{}
for i := range split {
set = append(set, split[i])
}
fmt.Println(set) // ["Have", "a", "great", "day!"]
}
Si solo quieres dividir en ciertos caracteres, puedes usar strings.FieldsFunc
, de lo contrario, iría con regexp.FindAllString
.