gpt4 book ai didi

regex - Golang 正则表达式与 `ReplaceAllString` 的多个匹配项

转载 作者:数据小太阳 更新时间:2023-10-29 03:39:34 25 4
gpt4 key购买 nike

我正在尝试编写一些正则表达式来匹配和分离看起来像软件版本的字符串(但实际上并非如此,例如,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_PkgbasePatternTest_MkParser_Dependency:

https://github.com/rillig/pkglint/blob/master/mkparser_test.go

它很容易变得复杂。这就是为什么您应该从一开始就为每个有趣的案例编写测试。

关于regex - Golang 正则表达式与 `ReplaceAllString` 的多个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54284613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com