Can NewReplacer.Replace不區分大小寫的字符串替換嗎?不區分大小寫的字符串替換Go
r := strings.NewReplacer("html", "xml")
fmt.Println(r.Replace("This is <b>HTML</b>!"))
如果不是這樣,那麼在Go中執行不區分大小寫的字符串替換的最佳方法是什麼?
Can NewReplacer.Replace不區分大小寫的字符串替換嗎?不區分大小寫的字符串替換Go
r := strings.NewReplacer("html", "xml")
fmt.Println(r.Replace("This is <b>HTML</b>!"))
如果不是這樣,那麼在Go中執行不區分大小寫的字符串替換的最佳方法是什麼?
您可以使用正則表達式爲:
re := regexp.MustCompile(`(?i)html`)
fmt.Println(re.ReplaceAllString("html HTML Html", "XML"))
遊樂場: http://play.golang.org/p/H0Gk6pbp2c。
值得一提的是,case是一種可以根據語言和語言環境而不同的東西。例如,德語字母「ß」的大寫形式是「SS」。雖然這通常不影響英文文本,但在處理需要使用它們的多語言文本和程序時,需要記住這一點。
根據文檔does not。
我不知道的最好的方式,但你可以用replace in regular expressions做到這一點,並使其不區分大小寫與i
flag
一個通用的解決方案將是如下:
import (
"fmt"
"regexp"
)
type CaseInsensitiveReplacer struct {
toReplace *regexp.Regexp
replaceWith string
}
func NewCaseInsensitiveReplacer(toReplace, replaceWith string) *CaseInsensitiveReplacer {
return &CaseInsensitiveReplacer{
toReplace: regexp.MustCompile("(?i)" + toReplace),
replaceWith: replaceWith,
}
}
func (cir *CaseInsensitiveReplacer) Replace(str string) string {
return cir.toReplace.ReplaceAllString(str, cir.replaceWith)
}
,然後通過使用:
r := NewCaseInsensitiveReplacer("html", "xml")
fmt.Println(r.Replace("This is <b>HTML</b>!"))
這裏的一個link在遊樂場的例子。