我是围棋初学者. 我想不出如何不仅能替换符号,还能让围棋中的下一个字母大写.

任务: 完成该方法/函数,以便它将短划线/下划线分隔的单词转换为驼峰大小写.只有在原始单词大写的情况下,输出中的第一个单词才应该大写(称为上骆驼大小写,通常也称为Pascal大小写).

我try 用以下方法实现regexp方法:

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

但是我不能返回res,因为它是切片/数组,但我只需要返回字符串.

我的代码是:

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 StealthWarrior"或"TheStealthWarrior"

我的作品:《隐形勇士》

推荐答案

您需要在Go字符串文字中定义不带regex分隔符的regex,并且使用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模式匹配-_,然后匹配任何单词char.如果要从\w中排除_,请使用[^\W_]而不是\w.

Go相关问答推荐

如何使用Docker Compose配置Go,使main. go文件位于/CMD文件夹中

如何在gofr发起的服务间调用请求中添加Authorization Header?

使用Digitorus/pdfsign在GO(Golang)中签署pdf文件

如何在VSCode中为特定的.go文件创建调试配置?

Go中的Slice[:1][0]与Slice[0]

我找不到pcap.Openlive的设备名称

死锁 - 所有 goroutine 都处于睡眠状态(即使使用等待组)

为什么 mux.Vars() 返回空的 map[]

Golang - POST 失败(NoSurf CSRF)

如何使用管理员权限启动 powershell 进程并重定向标准输入 (os.exec)

上传图片失败,出现错误dial tcp: lookup api.cloudinary.com: no such host

使用 ssh 从私有 gilab 仓库导入一个 go 项目:未知修订

级联调用泛型函数时的泛型类型推断

使用反射在 struct 内迭代切片 struct

将接口方法的参数限制为几个允许的 struct ?

Go GCP 同时模拟两个服务帐户

K8s 算子读取原始数据

为什么在 goroutine 中声明时,benbjohnson/clock 模拟计时器不执行?

关于GO的几个问题

带有 *s3.S3 对象的 Golang 单元测试