Thanks. You were right about the expected default behaviour.
String.Replace() should follow Objo’s usual string-matching convention and perform a case-insensitive replacement when called with two arguments. The previous case-sensitive behaviour was an implementation oversight on my part ( 🙄 )
This has now been fixed, and a three-argument overload has been added for explicitly selecting the matching behaviour:
"FOO foo Foo".Replace("Foo", "Bar") # "Bar Bar Bar"
"FOO foo Foo".Replace("Foo", "Bar", True) # "FOO foo Bar"
"FOO foo Foo".Replace("Foo", "Bar", False) # "Bar Bar Bar"
Passing True requests case-sensitive matching; False requests case-insensitive matching. This will be included in the next release: https://feedback.objo.dev/feature/989