Как удалить избыточные пробелы / пробелы из строки в Golang?
Мне было интересно, Как удалить:
- все ведущие/замыкающие пробелы или символы новой строки, нулевые символы и т. д.
- любые избыточные пробелы в строке (ex. "hello[space] [space]world" будет преобразован в "hello [space]world")
возможно ли это с помощью одного регулярного выражения, с поддержкой unicode для международных символов пробела и т. д.?
3 ответов
кажется, что вы можете использовать оба \s
класс символов стенографии и \p{Zs}
свойство Unicode для соответствия пробелам Unicode. Однако оба шага не могут быть выполнены с заменой 1 regex, поскольку вам нужны две разные замены и ReplaceAllStringFunc
разрешает только целую строку соответствия в качестве аргумента (я понятия не имею, как проверить, какая группа соответствует).
таким образом, я предлагаю использовать два регулярных выражения:
-
^[\s\p{Zs}]+|[\s\p{Zs}]+$
- чтобы соответствовать все ведущие/замыкающие пробел -
[\s\p{Zs}]{2,}
- для соответствия 2 или более символов пробелов внутри строки
пример кода:
package main
import (
"fmt"
"regexp"
)
func main() {
input := " Text More here "
re_leadclose_whtsp := regexp.MustCompile(`^[\s\p{Zs}]+|[\s\p{Zs}]+$`)
re_inside_whtsp := regexp.MustCompile(`[\s\p{Zs}]{2,}`)
final := re_leadclose_whtsp.ReplaceAllString(input, "")
final = re_inside_whtsp.ReplaceAllString(final, " ")
fmt.Println(final)
}
вы можете получить довольно далеко просто использовать strings
пакет strings.Fields
делает большую часть работы за вас:
package main
import (
"fmt"
"strings"
)
func standardizeSpaces(s string) string {
return strings.Join(strings.Fields(s), " ")
}
func main() {
tests := []string{" Hello, World ! ", "Hello,\tWorld ! ", " \t\n\t Hello,\tWorld\n!\n\t"}
for _, test := range tests {
fmt.Println(standardizeSpaces(test))
}
}
// "Hello, World !"
// "Hello, World !"
// "Hello, World !"
используйте regexp для этого.
func main() {
data := []byte(" Hello, World ! ")
re := regexp.MustCompile(" +")
replaced := re.ReplaceAll(bytes.TrimSpace(data), []byte(" "))
fmt.Println(string(replaced))
// Hello, World !
}
для того чтобы обрезать новые строки и нулевые символы, вы можете использовать