英文:
Regex-change substring to uppercase in a string golang
问题
我需要将一个字符串替换为同样单词的大写形式。到目前为止,我可以从包含我的字符串的文本文件中搜索子字符串,并将单词替换为"APPLE",例如"apple"、"Apple"或"ApPle"。问题出现在字符串是"Is that pineapple Apple adamsApple applepie smell?"时,我的搜索关键字存在于其他单词之间,因此无法找到并转换。
我的最终工作代码:
//从目录中获取txt文件并搜索单词
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) //使搜索关键字不区分大小写
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) //将结果写回文件
}
英文:
I need to replace a string with a uppercase of the same word.So far i can search for sub-string from a text file which contains my string and replace a word like "apple" or "Apple" or "ApPle" to "APPLE". The problem exist when the string is "Is that pineapple Apple adamsApple applepie smell?", my search keyword exist between the other word so it cannot be found and converted.
MY final working code:
//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
}
答案1
得分: 3
你应该使用正则表达式来实现,这是一个简单的示例:
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
}
英文:
You should use regexp for that, a simple 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)
})
}
//edit
I think I misunderstood the question, if all you want is to replace a word even if it's in the middle of other words, like myapplecomputer
then using strings.Replace
should be enough, for example:
func ReplaceLikeYouDontCare(src string, words ...string) string {
for _, w := range words {
src = strings.Replace(src, w, strings.ToUpper(w), -1)
}
return src
}
答案2
得分: 1
不是strings.Replace正是你要找的吗?
func fileRead(getPath string, searchkey string) {
buf, _ := ioutil.ReadFile(getPath)
strings.Replace(string(buf), searchkey, strings.ToUpper(searchkey), -1)
}
英文:
Isn't strings.Replace exactly what you're looking for?
func fileRead(getPath string, searchkey string) {
buf, _ := ioutil.ReadFile(getPath)
strings.Replace(string(buf), searchkey, strings.ToUpper(searchkey), -1)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论