We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Today, I'll show you how to do a case-insensitive string replace in Go.
By default, string replacement in Go is case-sensitive, but sometimes, that's not the desired behaviour.
The best way to tackle this problem is to use the regexp (regular expressions) package to do this.
You can do it with a simple function like this:
import (
"regexp"
)
func CaseInsensitiveReplace(subject string, search string, replace string) string {
searchRegex := regexp.MustCompile("(?i)" + search)
return searchRegex.ReplaceAllString(subject, replace)
}
The trick is in the regular expression pattern. The modifier i
tells it to be case-insensitive.
This works flawlessly, however, there is one caveat: performance.
To give you an idea about the performance penalty, I wrote a simple benchmark:
import (
"testing"
)
func Benchmark_CaseInsensitiveReplace(b *testing.B) {
for n := 0; n < b.N; n++ {
twxstring.CaseInsensitiveReplace("{Title}|{Title}", "{title}", "My Title")
}
}
func Benchmark_CaseSensitiveReplace(b *testing.B) {
for n := 0; n < b.N; n++ {
strings.ReplaceAll("{Title}|{Title}", "{Title}", "My Title")
}
}
The results are pretty self-explanatory:
Benchmark_CaseInsensitiveReplace-4 420237 3384 ns/op 2119 B/op 24 allocs/op
Benchmark_CaseSensitiveReplace-4 8224800 190 ns/op 64 B/op 2 allocs/op
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.