英文:
Alphanumeric serial with hyphen not working using Go's regex
问题
我的理想正则表达式将在序列匹配以下内容时返回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为true,但一旦调用变量b,它会返回false,因为有额外的连字符。
我的问题是,如何在字母数字字符之间添加多个连字符以匹配理想序列A12T-4GH7-QPL9-3N4M。
英文:
My ideal regex would return true if the serial matched something like below.
A12T-4GH7-QPL9-3N4M
Here is what I tried.
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))
}
Observe how the variable a is true but as soon as b is called it returns false with the extra hyphen.
My question is, how do I add multiple hyphens in-between alphanumeric characters for this ideal sequence A12T-4GH7-QPL9-3N4M
答案1
得分: 2
你使用的正则表达式只匹配了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
英文:
The regexp you've used matches only 3 (4 in the second example) characters.
If you want to match a set of characters separated by hyphens, you should try a regexp like ([a-zA-Z0-9]+-)+[a-zA-Z0-9]+
which translates to code as:
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))
}
答案2
得分: 2
你需要使用以下正则表达式进行匹配:
regexp.MustCompile("^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$")
该模式匹配:
^
- 字符串的开头[a-zA-Z0-9]+
- 一个或多个字母数字字符(?:-[a-zA-Z0-9]+)*
- 零个或多个连字符和一个或多个字母数字字符的组合$
- 字符串的结尾。
请参考正则表达式演示。
英文:
You need to use
regexp.MustCompile("^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$")
The pattern matches
^
- start of string[a-zA-Z0-9]+
- one or more alphanumeric(?:-[a-zA-Z0-9]+)*
- zero or more occurrences of a hyphen and then one or more alphanumeric chars$
- end of string.
See the regex demo.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论