我在GO中写了一个函数来清理单个单词,以这种方式,每个单词开头和结尾的特殊字符将被删除。
即:
- .-你好,-〉你好
- “背靠背”-〉背靠背
最后,通过从每一端逐个字母地检查它们是否属于unicode。Letter set,这很好用,但我想知道是否有更好或更有效的方法来做到这一点?我尝试了字符串。TrimLeft/Right,但然后我必须定义自己的字符集来删除。使用预定义的集合会很好。
func TrimWord(word []rune) string {
var prefix int = 0
var suffix int = len(word)
for x := 0; x < len(word); x++ {
if !unicode.IsLetter(word[x]) {
prefix++
} else {
break
}
}
for x := len(word) - 1; x >= 0; x-- {
if suffix == prefix {
break
}
if !unicode.IsLetter(word[x]) {
suffix--
} else {
break
}
}
return string(word[prefix:suffix])
}
3条答案
按热度按时间r9f1avp51#
https://go.dev/play/p/l1A4hBDvFfr
Package strings
TrimFunc返回字符串s的一个切片,其中删除了所有满足f(c)的前导和尾随Unicode代码点c。
fnvucqvd2#
换句话说
您希望第一个
unicode.letter
到最后一个unicode.letter
如果你不在乎,仍然用同样的方法来获得结果,你会得到很小的改善
ivqmmu1c3#
正则表达式很好很简洁。
\pL
匹配任何Unicode字母;\PL
是相同的匹配否定(匹配任何 * 除了 * 一个Unicode字母)。https://goplay.tools/snippet/SrezNxxawW7