2013-05-09 30 views
2

我在做什麼錯?爲什麼ToUpper不工作?使用ReplaceAllString和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

它正在工作。 'strings.ToUpper(「$ 1」)==「$ 1」'。 – 2013-05-09 06:59:32

+0

@isbadawi不明白,我期待strings.ToUpper(「$ 1」)!=「$ 1」。我在這裏錯過了什麼? – 2013-05-09 07:04:00

+0

你正在大寫'「$ 1」',它已經是大寫,所以你回到'「$ 1」'。這發生在調用'ReplaceAllString'之前。 – 2013-05-09 07:09:43

回答

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) 
} 
+0

noob顯然,謝謝你的解釋! – 2013-05-09 07:37:59

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來完成你想要做什麼,但是,由於尼克·克雷格 - 伍德在另一個答覆中提到,您可以使用strings.ReplaceAllStringFuncaccomplish the desired behavior

+0

感謝@noj的徹底解釋:) – 2013-05-10 12:32:03