Regex-изменить подстроку в верхний регистр в строке golang

Мне нужно заменить строку на верхний регистр того же слова. Пока я могу искать подстроку в текстовом файле, который содержит мою строку, и заменить слово, например, "яблоко", "яблоко" или "ApPle", на "APPLE". ". Проблема возникает, когда строка "Запах яблочного яблока в ананасе от яблока?", Мое ключевое слово поиска существует между другим словом, поэтому его невозможно найти и преобразовать.

МОЙ окончательный рабочий код:

 //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 ответа

Решение

Вы должны использовать для этого регулярное выражение, простой пример:

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
}

Разве это не строки? Заменить именно то, что вы ищете?

func fileRead(getPath string, searchkey string) {
    buf, _ := ioutil.ReadFile(getPath)
    strings.Replace(string(buf), searchkey, strings.ToUpper(searchkey), -1)
}
Другие вопросы по тегам