我尝试过在Javascript中做过的事情。 但它说 http://play.golang.org/p/qlWLI03Dnl
package main
import "fmt"
import "regexp"
import "strings"
func swapit(str string) string {
var validID = regexp.MustCompile(`[a-z]|[A-Z]`)
return validID.ReplaceAllString(str, func(${0}, ${1}, ${2}) string {
return (${1}) ? strings.ToUpper(${0}) : strings.ToLower(${0})
})
}
func main() {
fmt.Println(swapit("hello wOrld."))
// HELLO WoRLD.
}
我也试过这个删除? :语法但仍然无效。 http://play.golang.org/p/mD6_78zzo1
真的不支持这个吗?我是否只是放弃并强迫每个角色改变案件?
非常感谢
答案 0 :(得分:8)
正如@James Henstridge已经指出的那样,您的代码存在多个问题。这个答案不会关注错误,而是解决问题的另一种方式。
如果你的目的是学习在Go中使用正则表达式,我的这个答案是没用的
如果你的目的是学习如何制作一个交换案例的函数,那么我建议使用unicode
包代替没有正则表达式的解决方案:
package main
import (
"bytes"
"fmt"
"unicode"
)
func SwapCase(str string) string {
b := new(bytes.Buffer)
for _, r := range str {
if unicode.IsUpper(r) {
b.WriteRune(unicode.ToLower(r))
} else {
b.WriteRune(unicode.ToUpper(r))
}
}
return b.String()
}
func main() {
fmt.Println(SwapCase("Hej värLDen."))
}
输出:
hJJVÄRldEN。
此解决方案也将处理所有非A-Z字符,例如ö-Ö和å-Å。