正则表达式将单词与+(加号)符号匹配

时间:2010-09-04 11:06:59

标签: c# regex

我花了一些时间,但还是要解决。我需要能够在字符串中匹配带有符号的单词(如c ++)的正则表达式。

我使用过/\bword\b/,对于“常用”字词,它可以正常使用。但是一旦我尝试/\bC\+\+\b/它就行不通。一些加号的工作原理是错误的。

我需要一个正则表达式来检测输入字符串是否包含c ++单词。输入如,

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

PS。使用C#,。Net Regex.Match函数。

感谢您的帮助!

5 个答案:

答案 0 :(得分:16)

+是一个特殊角色,所以你需要逃避它

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

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

答案 1 :(得分:5)

问题不在于加号字符,即您已正确转义,而是\b序列。它表示单词边界,它是单词字符(字母数字)和其他内容之间的点。 Plus不是单词字符,因此要匹配\b,最后一个加号后面需要有一个单词字符。

\bC\+\+\b匹配“Test C ++ Test”但不匹配“Test C ++ Test”。如果您希望在最后一个加号后面有空格,请尝试\bC\+\+\s之类的内容。

答案 2 :(得分:2)

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

更新:问题在于\b序列

答案 3 :(得分:0)

正如其他人所说,你的问题不是你已正确转义的+符号,而是\b,它是一个零长度字符,匹配字{{{}之间的字边界1}}和非单词\w char。

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

答案 4 :(得分:0)

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

\bc\+\+\B

请参见regex demo,其中\bword boundary,而\B匹配不是单词边界位置的所有位置。

C#语法:

var pattern = @"\bc\+\+\B";

您必须记住\b / \B是上下文相关的:\b在字符串的开头/结尾与相邻的单词char或一个单词与一个非单词chars之间匹配,而\B在字符串的开头/结尾与相邻的* non- * word字符之间或两个单词或两个非单词chars之间匹配。

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

改为使用(?<!\w)(?!\w)环顾四周,它们将始终匹配未立即在其后/紧随其后的单词char:

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

如果您要匹配的单词边界是空白边界(即,仅在空白之间才需要匹配),请使用

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