我需要用相同单词的大写替换字符串。到目前为止,我可以从包含我的字符串的文本文件中搜索子字符串并替换“apple”或“Apple”或“ApPle”之类的单词到“APPLE”。当字符串是“那菠萝苹果adamsApple applepie气味吗?”时,问题就出现了,我的搜索关键字存在于另一个单词之间,因此无法找到并转换。
我的最终工作代码:
//Get the txt file from the directory and search for word
func fileRead(getPath string, searchkey string){
var count int
buf1,_:=ioutil.ReadFile(getPath);
var buf2= string(buf1)
var b string
tokens:=strings.Fields(buf2)
re := regexp.MustCompile("(?i)"+searchkey)//make searchkey case insensitive
for i:=0;i<len(tokens);i++{
if (strings.EqualFold(tokens[i],searchkey)){
tokens[i] = re.ReplaceAllString(tokens[i], strings.ToUpper(searchkey))
count++
}else{
tokens[i]=re.ReplaceAllLiteralString(tokens[i],strings.ToUpper(searchkey))
count++
}
}
for j:=0; j<len(tokens); j++{
b+= tokens[j]
b+=" "
}
c := []byte(b)
fmt.Println(count," ",getPath)
ioutil.WriteFile(getPath, c, 0644)//rights back to the file
}
答案 0 :(得分:1)
你应该使用正则表达式,一个简单的example:
func KeywordsToUpper(src string, keywords ...string) string {
var re = regexp.MustCompile(`\b(` + strings.Join(keywords, "|") + `)\b`)
return re.ReplaceAllStringFunc(src, func(w string) string {
return strings.ToUpper(w)
})
}
//修改
我想我误解了这个问题,如果你想要的只是替换一个单词,即使它在其他单词的中间,如myapplecomputer
,那么使用strings.Replace
就足够了,例如:< / p>
func ReplaceLikeYouDontCare(src string, words ...string) string {
for _, w := range words {
src = strings.Replace(src, w, strings.ToUpper(w), -1)
}
return src
}
答案 1 :(得分:1)
strings.Replace不正是您正在寻找的东西吗?
func fileRead(getPath string, searchkey string) {
buf, _ := ioutil.ReadFile(getPath)
strings.Replace(string(buf), searchkey, strings.ToUpper(searchkey), -1)
}