2

私が間違っていることは何ですか?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)
}
4

2 に答える 2

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達成できます。

于 2013-05-10T08:15:32.997 に答える