2010-12-16 20 views

Respuesta

8

Si solo desea dividir en ciertos caracteres, puede usar strings.FieldsFunc, de lo contrario iría con regexp.FindAllString.

+0

Intenté esto, pero sobrescribe el carácter que quiero dividir. No quiero perder el personaje, simplemente inserte un espacio. Usé un ciclo for para llegar a mi objetivo. Gracias. PD: su respuesta no incluyó expresiones regex, ¿quizás por eso hay un voto negativo? – Brenden

+0

Nada se "sobrescribe", solo se trata de lo que se devolvió. Si lo desea, siempre puede usar una función de expresión regular diferente para obtener los índices y usarlos. –

1

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!

+1

No estoy seguro de dónde obtuvo 'RegExp', pero el nombre correcto del paquete es' regexp'. Ir es sensible a mayúsculas y minúsculas! –

13

Realicé una función de expresión regex basada en el comportamiento de la función de división de expresiones regulares en java, C#, php .... Devuelve solo 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] 
5

La función regexp.Split() sería la mejor manera de hacer esto.

+0

Parece que esto fue [agregado en Ir 1.1] (https://golang.org/doc/go1.1) ([mayo de 2013] (https://golang.org/doc/devel/release.html#go1. 1)). – n8henrie

Cuestiones relacionadas