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

时间:2018-02-15 15:57:47

标签: regex string go replace substring

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

这适用于php / javascript但不适用于golang和#34;?="不受支持。

\w(?=\w{4,}$)

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

(\w)(?:\w{4,}$)

JavaScript working link

Go non-working link

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")

然后合并maskedPartlast4以获得结果:

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