当前位置: > > > > Golang 正则表达式与 `ReplaceAllString` 进行多个匹配
Golang 正则表达式与 `ReplaceAllString` 进行多个匹配
来源:stackoverflow
2024-04-27 19:57:41
0浏览
收藏
积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《Golang 正则表达式与 `ReplaceAllString` 进行多个匹配》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
问题内容
我正在尝试编写一些正则表达式来匹配和分离看起来像软件版本的字符串(但它们实际上并非如此,因此例如 semver 解析将无法工作)。我在匹配输入字符串的“前缀”和“后缀”部分时遇到一些问题。
我从下面得到的输出很奇怪..
// Sample inputs:
// * '1.2.3-thing' (Prefix: '1.2.3', Suffix: '-thing')
// * '1.2.3+1' (Prefix: '1.2.3', Suffix: '+1')
// * '1.2.3' (Prefix: '1.2.3', Suffix: '')
// * '1' (Prefix: '1', Suffix: '')
// * '1-x' (Prefix: '1', Suffix: '-x')
// * '1-x-x' (Prefix: '1', Suffix: '-x-x')
// * '1.2.3-thing.1' (Prefix: '1.2.3', Suffix: '-thing.1')
// * '1.2-thing-1' (Prefix: '1.2', Suffix: '-thing-1')
// * 'k1.2.3-thing' (Prefix: 'k1.2.3', Suffix: '-thing')
// * 'k-thing-x' (Prefix: 'k', Suffix: '-thing-x')
//
func InspectVersionTag(tag string) {
re := regexp.MustCompile(`^([^\-]+)([\-+].+)$`)
suffix := ""
if re.MatchString(tag) {
tag = re.ReplaceAllString(tag, `$1`)
suffix = re.ReplaceAllString(tag, `$2`)
}
fmt.Println(fmt.Sprintf("Prefix is: %s", tag))
fmt.Println(fmt.Sprintf("Suffix is: %s", suffix))
}
// Current sample output
//
// Input: 1.2.3+1
// Prefix is: 1.2.3
// Suffix is: 1.2.3
解决方案
根据您的示例,这应该非常简单。我从头到尾写下了以下代码。它甚至可能无法编译,但你应该明白:
func parseVersion(ver string) (prefix, suffix string) {
parts := strings.SplitAfter(ver, "-", 2)
if len(parts) == 1 {
parts = strings.SplitAfter(ver, "+", 2)
}
if len(parts) == 1 {
return ver, ""
}
return parts[0], parts [1]
}
您绝对应该在自动测试中列出所有示例,而不是注释。如果上述代码没有帮助,则说明您的示例不够现实。
这是我解决类似问题的方法。在这里查看 test_mkparser_pkgbasepattern 和 test_mkparser_dependency:
它很容易变得复杂。这就是为什么您应该从一开始就为每个有趣的案例编写一个测试。
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Golang 正则表达式与 `ReplaceAllString` 进行多个匹配》文章吧,也可关注米云公众号了解相关技术文章。
