I want the same functionality as \\b
but with other characters.
In C#, I want to have something like
string str = \"\\\\b\" + Regex.Escape(
The problem you experience is related to the fact that \b word boundary is context dependent, and \b\(abc\b
will match (abc
in x(abc)
but not in :(abc)
(\b\(
means there must be a word char before (
).
To match any string that is not enclosed with word chars use
var pattern = $@"(?<!\w){Regex.Escape(string)}(?!\w)";
See the regex demo.
Here, (?<!\w)
is a negative lookbehind that will make sure there is no word char immediately to the left of the current location, and (?!\w)
negative lookahead will make sure there is no word char immediately to the right of the current location.
Other custom "word" boundaries:
var pattern = $@"(?<!\S){Regex.Escape(string)}(?!\S)"; // Match when enclosed with whitespaces
c
in c++
): var pattern = $@"(?<![\w\p{S}]){Regex.Escape(string)}(?![\w\p{S}])";
For this you'd need a conditional word boundary at each end.
It just guards the string begin and end, if it's a word, it must be at
a word boundary.
If it's not a word, the default is nothing, as it should be.
(?(?= \w )
\b
)
(?: @\(Something )
(?(?<= \w )
\b
)
So, it ends up looking like
string str = "(?(?=\\w)\\b)" + Regex.Escape(string) + "(?(?<=\\w)\\b)";
Regexstorm.net demo
This takes the guesswork out of it.