Solución:
Puede llegar bastante lejos con solo strings
paquete como strings.Fields
hace la mayor parte del trabajo por usted:
package main
import (
"fmt"
"strings"
)
func standardizeSpaces(s string) string {
return strings.Join(strings.Fields(s), " ")
}
func main() {
tests := []string{" Hello, World ! ", "Hello,tWorld ! ", " tnt Hello,tWorldn!nt"}
for _, test := range tests {
fmt.Println(standardizeSpaces(test))
}
}
// "Hello, World !"
// "Hello, World !"
// "Hello, World !"
Parece que es posible que desee utilizar ambos s
clase de caracteres taquigráficos y p{Zs}
Propiedad Unicode para que coincida con los espacios Unicode. Sin embargo, ambos pasos no se pueden realizar con 1 reemplazo de expresión regular, ya que necesita dos reemplazos diferentes, y el ReplaceAllStringFunc
solo permite una cadena de coincidencia completa como argumento (no tengo idea de cómo verificar qué grupo coincidió).
Por lo tanto, sugiero usar dos expresiones regulares:
-
^[sp{Zs}]+|[sp{Zs}]+$
– para que coincida con todos los espacios en blanco iniciales / finales -
[sp{Zs}]{2,}
– para hacer coincidir 2 o más símbolos de espacios en blanco dentro de una cadena
Código de muestra:
package main
import (
"fmt"
"regexp"
)
func main() {
input := " Text More here "
re_leadclose_whtsp := regexp.MustCompile(`^[sp{Zs}]+|[sp{Zs}]+$`)
re_inside_whtsp := regexp.MustCompile(`[sp{Zs}]{2,}`)
final := re_leadclose_whtsp.ReplaceAllString(input, "")
final = re_inside_whtsp.ReplaceAllString(final, " ")
fmt.Println(final)
}
strings.Fields () se divide en cualquier cantidad de espacio en blanco, así:
strings.Join(strings.Fields(strings.TrimSpace(s)), " ")
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)