Word boundaries not matching when the word starts or ends with special character like square brackets
You must account for two things here:
- Special characters must be escaped with a literal
\
symbol that is best done usingRegex.Escape
method when you have dynamic literal text passed as a variable to regex - It is not possible to rely on word boundaries,
\b
, because the meaning of this construct depends on the immediate context.
What you may do is use Regex.Escape
with unambiguous word boundaries (?<!\w)
and (?!\w)
:
string input= "This is [test] version of application.";
string key = "[test]";
string stringtoFind = $@"(?<!\w){Regex.Escape(key)}(?!\w)";
Console.WriteLine(Regex.Replace(input, stringtoFind, "1.0"));
Note that if you want to replace a key string when it is enclosed with whitespaces use
string stringtoFind = $@"(?<!\S){Regex.Escape(key)}(?!\S)";
^^^^^^ ^^^^^