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