登录
首页 >  Golang >  Go问答

捕获字母组并用组中的数字重复它们一定的次数

来源:stackoverflow

时间:2024-04-19 20:00:31 325浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《捕获字母组并用组中的数字重复它们一定的次数》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我有这样的字符串:“r2(lf)3(pa)”,并想将其转换为 rlflfpapapa(去掉数字并重复字母组)

提出的想法是使用正则表达式来捕获组,但我坚持使用下面的代码来获取结果,我该如何解决这个问题?或者我需要尝试其他方法?

package main

import (
    "fmt"
    "regexp"
)

func main() {
    fmt.Println(move("R2(LF)3(PA)"))
}

func move(s string) string {

    rgx := regexp.MustCompile(`(\d)\((\w+)\)`)

    // code need here


    return s
}


正确答案


似乎go没有带有回调函数的替换函数(这是我们这里最实用的情况)。但我找到了this implementation to do it

因此,我们的想法是将包含数字字符串的第一个组转换为整数值。然后我们可以重复包含字母的组 2 的次数:

package main

import (
    "fmt"
    "regexp"
    "strconv"
    "strings"
)

func main() {
    fmt.Println(move("R2(LF)3(PA)"))
}

func ReplaceAllStringSubmatchFunc(re *regexp.Regexp, str string, repl func([]string) string) string {
    result := ""
    lastIndex := 0
    for _, v := range re.FindAllSubmatchIndex([]byte(str), -1) {
        groups := []string{}
        for i := 0; i < len(v); i += 2 {
            groups = append(groups, str[v[i]:v[i+1]])
        }
        result += str[lastIndex:v[0]] + repl(groups)
        lastIndex = v[1]
    }
    return result + str[lastIndex:]
}

func move(s string) string {
    rgx := regexp.MustCompile(`(\d)\((\w+)\)`)
    return ReplaceAllStringSubmatchFunc(rgx, s, func(groups []string) string {
        // Convert the first group with the digits to an integer value.
        nbrTimes, err := strconv.Atoi(groups[1])
        if err != nil {
            // Handle error (could happen if very long number).
        }
        // Return the group 2 with the letters repeated n times.
        return strings.Repeat(groups[2], nbrTimes)
    })
}

您可以在这里在线运行它:https://go.dev/play/p/FKNFJSc_tdS

好了,本文到此结束,带大家了解了《捕获字母组并用组中的数字重复它们一定的次数》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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