使用Go,如何用" X"替换字符串中的所有字符?除了最后4个字符?
这适用于php / javascript但不适用于golang和#34;?="不受支持。
\w(?=\w{4,}$)
试过这个,但不起作用。我找不到任何与golang类似的东西
(\w)(?:\w{4,}$)
答案 0 :(得分:6)
处理多个UTF-8字节字符的简单而有效的解决方案是将string
转换为[]rune
,用'X'
覆盖符文(除了最后4个),然后转换回到string
。
func maskLeft(s string) string {
rs := []rune(s)
for i := 0; i < len(rs)-4; i++ {
rs[i] = 'X'
}
return string(rs)
}
测试它:
fmt.Println(maskLeft("123"))
fmt.Println(maskLeft("123456"))
fmt.Println(maskLeft("1234世界"))
fmt.Println(maskLeft("世界3456"))
输出(在Go Playground上尝试):
123
XX3456
XX34世界
XX3456
另请参阅相关问题:How to replace all characters in a string in golang
答案 1 :(得分:0)
使用
创建Regexp
re := regexp.MustCompile("\w{4}$")
我们说inputString
是您要删除最后四个字符的字符串。使用此代码返回inputString
的副本,不包含最后4个字符:
re.ReplaceAllString(inputString, "")
注意:如果您的输入字符串可能少于四个字符,并且您仍然希望删除这些字符,因为它们位于字符串的末尾,您应该使用:
re := regexp.MustCompile("\w{0,4}$")
答案 2 :(得分:0)
假设inputString
是您要屏蔽所有字符的字符串(除了最后四个字符)。
首先获取字符串的最后四个字符:
last4 := string(inputString[len(inputString)-4:])
然后得到一串X,其长度与inputString
相同,减去4:
re := regexp.MustCompile("\w")
maskedPart := re.ReplaceAllString(inputString[0:len(inputString)-5], "X")
然后合并maskedPart
和last4
以获得结果:
maskedString := strings.Join([]string{maskedPart,last4},"")
答案 3 :(得分:0)
没有正则表达式和循环的简单方法
package main
import (
"fmt"
"strings"
)
func main() {
string := "thisisarandomstring"
head := string[:len(string)-4]
tail := string[len(string)-4:]
mask := strings.Repeat("x", len(head))
fmt.Printf("%v%v", mask, tail)
}
// Output:
// xxxxxxxxxxxxxxxring