C# 将单词与+;(加)标志

C# 将单词与+;(加)标志,c#,regex,C#,Regex,我已经花了一些时间,但仍然要解决这个问题。我需要正则表达式,它能够匹配字符串中带有符号的单词(如c++) 我使用了/\bword\b/,对于“常用”词,它可以正常工作。但只要我尝试/\bC\+\+\b/,它就是不起作用。这是一个加号的错误 < >我需要一个正则表达式来检测输入字符串是否包含C++字。输入像 "c++ developer" "using c++ language" 等等 使用C#,.Net正则表达式.Match函数 谢谢你的帮助 +是一个特殊字符,因此需要对其进行转义 \bC\

我已经花了一些时间,但仍然要解决这个问题。我需要正则表达式,它能够匹配字符串中带有符号的单词(如c++)

我使用了
/\bword\b/
,对于“常用”词,它可以正常工作。但只要我尝试
/\bC\+\+\b/
,它就是不起作用。这是一个加号的错误

< >我需要一个正则表达式来检测输入字符串是否包含C++字。输入像

"c++ developer"
"using c++ language" 
等等

使用C#,.Net正则表达式.Match函数


谢谢你的帮助

+
是一个特殊字符,因此需要对其进行转义

\bC\+\+(?!\w)

请注意,我们不能使用
\b
,因为
+
不是单词字符。

加号有特殊含义,因此您必须使用
\
对其进行转义。同样的规则也适用于这些字符:
\、*、+、?、|、{、[、(、)、^、$、、#、
和空格


更新:问题在于
\b
序列

问题不在于正确转义的加号字符,而在于
\b
序列。它表示单词边界,即单词字符(字母数字)之间的点另外.Plus不是单词字符,所以要匹配
\b
,就需要在最后一个加号后面直接有一个单词字符


<代码> \B\++\b//> >匹配“测试C++测试”,而不是“测试C++测试”例如,如果您希望最后一个加号后面有一个空格,请尝试类似于

\bC\+\+\s
的方法。

正如其他人所说,您的问题不是正确转义的
+
号,而是
\b
这是一个零长度字符,它与单词
\w
和非单词之间的单词边界相匹配
\W
char


正则表达式中还有另一个错误,您希望将char
C
(大写)与
C++
(小写)匹配。为此,您必须将正则表达式更改为
/\bc\++/
或使用
i
修饰符匹配不区分大小写:
/\bc\++/i

如果要在非单词字符(字母、数字和下划线以外的字符)之间匹配
c++
,您可以使用

\bc\+\+\B
请参见其中的
\b
是a并且
\b
匹配所有非单词边界位置的位置

C#语法:

您必须记住,
\b
/
\b
与上下文相关:
\b
字符串的开头/结尾与相邻的单词字符或单词与非单词字符之间匹配,而
\b
字符串的开头/结尾与相邻的*非单词字符之间匹配,或两个单词或两个非单词字符之间匹配

如果动态构建模式,很难依赖单词边界
\b
模式。

改用
(?和
(?!\w)
环顾四周,它们将始终与前面/后面没有单词字符的单词匹配:

var pattern = $@"(?<!w){Regex.Escape(word)}(?!\w)";

var pattern=$@”(?嗨,Kenny,我正在使用它。它没有显示在视图中。我已经更正了一个问题。它不是那样工作的。当我尝试转义加号时,Visual Studio将不会编译。@WEFX在双引号之前添加一个
@
@\bC\++(?!\w)“
特别是
\b
\w
之间的匹配(反之亦然)。非常感谢您的回答!\bC\+\+\s,效果很好,但它也匹配最后一个+号后的空格,这不是什么大问题,但有点出乎意料。@alexander您可以将空格设为前瞻,以避免将其包含在匹配中:
\bC\+(?=\s)
var pattern = $@"(?<!w){Regex.Escape(word)}(?!\w)";
var pattern = $@"(?<!S){Regex.Escape(word)}(?!\S)";