替换字符串中除最后4个字符以外的所有字符

rag*_*hzz 3 regex string replace substring go

使用Go,除了最后4个字符外,如何用"X"替换字符串中的所有字符?

这适用于php/javascript但不适用于golang,因为不支持"?=".

\w(?=\w{4,}$)
Run Code Online (Sandbox Code Playgroud)

试过这个,但不起作用.我找不到任何类似golang的东西

(\w)(?:\w{4,}$)
Run Code Online (Sandbox Code Playgroud)

JavaScript工作链接

去非工作链接

icz*_*cza 7

处理多个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)
}
Run Code Online (Sandbox Code Playgroud)

测试它:

fmt.Println(maskLeft("123"))
fmt.Println(maskLeft("123456"))
fmt.Println(maskLeft("1234??"))
fmt.Println(maskLeft("??3456"))
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

123
XX3456
XX34??
XX3456
Run Code Online (Sandbox Code Playgroud)

另请参阅相关问题:如何在golang中替换字符串中的所有字符

  • @Kaedys但是,如果传递的字符串短于4符文,那将会很恐慌,而我的解决方案却没有. (2认同)