正则表达式\ b但不仅仅是c#中的字母数字字符
我想要与\b
相同的function,但与其他字符相同。
在C#中,我希望有类似的东西
string str = "\\b" + Regex.Escape(string) + "\\b");
但是我有一些所以Regex.Escape("@(Something")
会在字符串Typing @(Something to you
找到你的Regex.Escape("@(Something")
找到它。
您遇到的问题与\b
字边界依赖于上下文的事实有关, \b\(abc\b
将匹配(abc
in x(abc)
但不在:(abc)
( \b\(
表示必须)在(
)之前成为一个单词char。
匹配任何未使用单词字符括起来的字符串
var pattern = $@"(?
请参阅正则表达式演示 。
在这里, (?是一个负面的lookbehind,它将确保当前位置左侧没有字符char,而
(?!\w)
负向前瞻将确保没有字符char立即当前位置的权利。
其他自定义“字”边界:
- 空白字边界:
var pattern = $@"(?
var pattern = $@"(?
- 单词和符号边界(如果你不想在
c++
找到c
):var pattern = $@"(?
为此,你需要在每一端都有一个条件字边界。
它只是保护字符串的开头和结尾,如果它是一个单词,它必须是
一个单词边界。
如果它不是一个单词,默认是没有的,因为它应该是。
(?(?= \w ) \b ) (?: @\(Something ) (?(?<= \w ) \b )
所以,它最终看起来像
string str = "(?(?=\\w)\\b)" + Regex.Escape(string) + "(?(?<=\\w)\\b)";
Regexstorm.net演示
这可以消除猜测。