在C#中使用Regex获取单词的完全匹配

Amo*_*kar 2 c# regex

我需要使用Regex匹配给定文本中的确切单词.

以下是代码,

var matchterm = "VO";
var pattern = "\\b(" + matchterm + ")\\b";
var text = "FOR OVER FIFTY YEARS WATER FUTURE VOA VO>> VO";
var regx = new Regex(pattern,RegexOptions.IgnoreCase);
var collection = regx.Matches(text);
Run Code Online (Sandbox Code Playgroud)

在这里,我试图从文本中得到准确的"VO"(不是来自VOA或VO >>).问题是正确匹配,我也从"VO"获得"VO",这是我不想要的.请帮忙.

Tho*_*oub 7

你可以使用正则表达式(?<!\S)(VO)(?!\S):

string pattern = String.Format("(?<!\\S){0}(?!\\S)", matchterm);
Run Code Online (Sandbox Code Playgroud)

它将确保matchterm前面有任何空格字符或行的开头,后跟任何空格字符或行尾

  • 使用更好的一个没有替换:`@"(?<!\ S){0}(?!\ S)"` - 你不需要捕获组,BTW,因为你可以更容易地访问`Match`元数据.另外,如果你在VS2015中编码,或者只是使用C#6.0,你可以使用`var pattern = $ @"(?<!\ S){matchterm}(?!\ S)"`. (2认同)