登录
首页 >  Golang >  Go问答

正则表达式仅在 golang 中屏蔽匹配 10 位数字的任何字符串

来源:Golang技术栈

时间:2023-04-15 12:19:24 219浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《正则表达式仅在 golang 中屏蔽匹配 10 位数字的任何字符串》带大家来了解一下正则表达式仅在 golang 中屏蔽匹配 10 位数字的任何字符串,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

由于 golang 正则表达式不支持前瞻,我想知道有什么方法可以创建一个正则表达式来屏蔽任何具有 10 位数字的字符串。

func main() {
    s := "arandomsensitive information: 1234567890 this is not senstive: 1234567890000000"
    re := regexp.MustCompile(`\d{10}`)
    s = re.ReplaceAllString(s, "$1**********$2")
    fmt.Println(s)
}

是否有可能得到这样的输出“随机敏感信息:1234****** 这不敏感:1234567890000000”

还有任何我可以尝试的没有前瞻的正则表达式吗?

正确答案

如果您知道 10 位数字只能出现在单词边界之间 - 即字母、数字或下划线以外的字符之间 - 您可以使用简单的单词边界方法ReplaceAllString

\b(\d{4})\d{6}\b

替换为$1******。在线查看正则表达式演示

\b(\d{4})\d{6}\b模式首先匹配一个单词边界,然后匹配并捕获四个数字到组 1,然后匹配任何六个数字,然后需要一个单词边界位置。

请参阅Go 演示

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := "arandomsensitive information: 1234567890 this is not senstive: 1234567890000000"
    re := regexp.MustCompile(`\b(\d{4})\d{6}\b`)
    s = re.ReplaceAllString(s, "$1******")
    fmt.Println(s)
}

如果您需要匹配任何非数字字符之间的 10 位数字,您可以使用

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := "aspacestrippedstring1234567890buttrailingonehouldnotbematchedastitis20characters12345678901234567890"
    re := regexp.MustCompile(`((?:\D|^)\d{4})\d{6}(\D|$)`)
    fmt.Println(re.ReplaceAllString(s, "$1******$2"))
}

查看Go 演示

注意 :由于 Golang 正则表达式不支持环视,因此不可能在一个步骤中使用正则表达式处理连续数字。(?!\d)前瞻可以匹配1234567890 1234567891字符串中的两个数字。因此,没有纯粹的正则表达式方法可以解决这样的连续匹配问题。但是, 您可以运行 regex replace 两次 来解决它:

result := re.ReplaceAllString(re.ReplaceAllString(s, "$1******$2"), "$1******$2")

正则表达式详细信息

  • ((?:\D|^)\d{4}) - 第 1 组:任何非数字字符或字符串开头,然后是任何 4 位数字
  • \d{6}- 任何六位数
  • (\D|$)- 第 2 组:任何非数字或字符串结尾。

理论要掌握,实操不能落!以上关于《正则表达式仅在 golang 中屏蔽匹配 10 位数字的任何字符串》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>