当前位置: > > > > 捕获字母组并用组中的数字重复它们一定的次数
捕获字母组并用组中的数字重复它们一定的次数
来源:stackoverflow
2024-04-19 20:00:31
0浏览
收藏
欢迎各位小伙伴来到米云,相聚于此都是缘哈哈哈!今天我给大家带来《捕获字母组并用组中的数字重复它们一定的次数》,这篇文章主要讲到等等知识,如果你对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没有带有回调函数的替换函数(这是我们这里最实用的情况)。但我找到了。
因此,我们的想法是将包含数字字符串的第一个组转换为整数值。然后我们可以重复包含字母的组 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)
})
}
您可以在这里在线运行它:
好了,本文到此结束,带大家了解了《捕获字母组并用组中的数字重复它们一定的次数》,希望本文对你有所帮助!关注米云公众号,给大家分享更多Golang知识!
