我想在Go中使用regexp交换案例。我试图在Javascript中使用类似的方法,但是我不知道如何使Go理解$符号。
func swapcase(str string) string { var validID = regexp.MustCompile(`[A-Z]`) return validID.ReplaceAllString(str, strings.ToLower(str)) /* var validID = regexp.MustCompile(`[a-z]`) return validID.ReplaceAllString(str, strings.ToUpper(str)) */ }
这是我的尝试。它适用于将所有高位转换为低位,反之亦然,但是我想做的是同时交换每个字母。例如,“ Hello” —>“ hELLO”
以下是我用Javascript编写的完美代码。
function SwapCase(str) { return str.replace(/([a-z])|([A-Z])/g, function($0, $1, $2) { return ($1) ? $0.toUpperCase() : $0.toLowerCase(); }) }
您不能(我认为)使用正则表达式执行此操作,但是使用可以很简单strings.Map。
strings.Map
package main import ( "fmt" "strings" ) func swapCase(r rune) rune { switch { case 'a' <= r && r <= 'z': return r - 'a' + 'A' case 'A' <= r && r <= 'Z': return r - 'A' + 'a' default: return r } } func main() { s := "helLo WoRlD" fmt.Println(strings.Map(swapCase, s)) }