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