我做错了什么?为什么ToUpper不起作用?
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
r := regexp.MustCompile("(\\w)(\\w+)")
// Getting "sometext" instead of "SomeText"
res := r.ReplaceAllString("some text", strings.ToUpper("$1") + "$2")
fmt.Println(res)
}
答案 0 :(得分:2)
您不能像我一样恐惧使用$1
和$2
!
我认为你正试图转变一些文字"进入" SomeText"。
Here is an alternative solution
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
r := regexp.MustCompile(`\s*\w+\s*`)
res := r.ReplaceAllStringFunc("some text", func(s string) string {
return strings.Title(strings.TrimSpace(s))
})
fmt.Println(res)
}
答案 1 :(得分:0)
strings.ToUpper("$1")
似乎不起作用,因为输入不是您认为的那样。让我们将您的程序分解为更易读的方式,以揭示问题所在:
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
r := regexp.MustCompile("(\\w)(\\w+)")
upper := strings.ToUpper("$1") // upper == upcase("$1") == "$1"
res := r.ReplaceAllString("some text", upper + "$2") // passing in "$1 $2"
fmt.Println(res)
}
如您所见,当您致电$1
时,strings.ToUpper
尚未被替换。
不幸的是,你无法真正使用strings.ReplaceAllString
来完成你想要做的事情,但是,正如Nick Craig-Wood在另一个答案中提到的那样,你可以使用strings.ReplaceAllStringFunc
来{{3 }}