regex - 如何在 Go 中替换符号并使下一个字母大写

标签 regex string go

我是 Go 的初学者。 我不知道如何不仅替换符号,而且使 Go 中的下一个字母大写。

任务: 完成方法/函数,以便将破折号/下划线分隔的单词转换为驼峰式大小写。仅当原始单词大写时,输出中的第一个单词才应大写(称为大驼峰式命名法,也通常称为帕斯卡大小写)。

我尝试使用以下方法实现正则表达式方法:

re, _ := regexp.Compile(`/[-_]\w/ig`)
    res := re.FindAllStringSubmatch(s, -1)
return res

但是我无法返回 res,因为它是 slice/数组,但我只需要返回字符串。

我的代码:

package main

import (
    "fmt"
    "strings"
)

func ToCamelCase(s string) string {
    s = strings.ReplaceAll(s, "-", "")
    s = strings.ReplaceAll(s, "_", "")
    return s
}

func main() {
    var s string
    fmt.Scan(&s)
    fmt.Println(ToCamelCase(s))
}

输入: “the-stealth-warrior”或“the_stealth_warrior”

输出: “theStealthWarrior”或“TheStealthWarrior”

我的输出:thestealthwarrior

最佳答案

Go字符串中需要定义不带正则分隔符的正则表达式,使用 ReplaceAllStringFunc function 更方便:

package main

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

func ToCamelCase(s string) string {
    re, _ := regexp.Compile(`[-_]\w`)
    res := re.ReplaceAllStringFunc(s, func(m string) string {
        return strings.ToUpper(m[1:])
    })
    return res
}

func main() {
    s := "the-stealth-warrior"
    fmt.Println(ToCamelCase(s))
}

请参阅Go playground .

输出是theStealthWarrior

[-_]\w 模式匹配 -_,然后匹配任何单词字符。如果您想从 \w 中排除 _,请使用 [^\W_] 而不是 \w

关于regex - 如何在 Go 中替换符号并使下一个字母大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73305148/

相关文章:

java - 特定长度字符的子字符串

计算字符串中的字符数

Go:比较匿名结构

http - 为什么我的 Hello World go 服务器被 ApacheBench 压垮了?

go - 使用 Golang 和 Windows 服务器机器

ruby - 在可变数量的单词上拆分字符串

javascript - 如何在 Javascript 中使用正则表达式来截取 URL 的一部分而不指定固定长度?

.net - 正则表达式 - 只匹配 7 个字符?

regex - 如何从日志文件中 grep 错误但过滤掉错误警报?

python - 如何使用 python 正确地将引号添加到字符串?