首页 > 解决方案 > 带有连字符的字母数字序列无法使用 Go 的正则表达式

问题描述

如果序列匹配如下所示,我理想的正则表达式将返回 true。

A12T-4GH7-QPL9-3N4M

这是我尝试过的。

package main

import "fmt"
import "regexp"

func main() {
    a := "A12T-A12T"
    re := regexp.MustCompile("[a-zA-Z0-9]-[a-zA-Z0-9]")
    fmt.Println(re.MatchString(a))

    b := "A12T-A12T-"
    re2 := regexp.MustCompile("[a-zA-Z0-9]-[a-zA-Z0-9]-")
    fmt.Println(re2.MatchString(b))
}

观察变量 a 是如何为真的,但是一旦调用 b ,它就会返回带有额外连字符的假。

我的问题是,如何在这个理想序列 A12T-4GH7-QPL9-3N4M 的字母数字字符之间添加多个连字符

标签: regexgo

解决方案


您使用的正则表达式仅匹配 3 个(在第二个示例中为 4 个)字符。

如果要匹配由连字符分隔的一组字符,则应尝试使用正则表达式,例如([a-zA-Z0-9]+-)+[a-zA-Z0-9]+

转换为代码:

package main

import "fmt"
import "regexp"

func main() {
    a := "A12T-4GH7-QPL9-3N4M"
    re := regexp.MustCompile("([a-zA-Z0-9]+-)+[a-zA-Z0-9]+")
    fmt.Println(re.MatchString(a))
}

https://play.golang.org/p/dMoIOaeUHBa


推荐阅读