正则表达式 - 在字符串golang中将子字符串更改为大写

时间:2014-07-17 17:33:39

标签: regex string go rune

我需要用相同单词的大写替换字符串。到目前为止,我可以从包含我的字符串的文本文件中搜索子字符串并替换“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
   }

2 个答案:

答案 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)
}