-2

文字列を同じ単語の大文字に置き換える必要があります。これまでのところ、文字列を含むテキスト ファイルから部分文字列を検索し、「apple」、「Apple」、「ApPle」などの単語を「APPLE」に置き換えることができます。 "。文字列が「Is that pineapple 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
   }
4

2 に答える 2

2

そのためには正規表現を使用する必要があります。簡単な:

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するだけで十分です。

func ReplaceLikeYouDontCare(src string, words ...string) string {
    for _, w := range words {
        src = strings.Replace(src, w, strings.ToUpper(w), -1)
    }
    return src
}
于 2014-07-17T17:46:09.393 に答える
1

探しているものを正確に置き換えますか?

func fileRead(getPath string, searchkey string) {
    buf, _ := ioutil.ReadFile(getPath)
    strings.Replace(string(buf), searchkey, strings.ToUpper(searchkey), -1)
}
于 2014-07-17T17:55:55.210 に答える