如何使用regex c#替换文本中的确切单词#

时间:2012-08-03 21:01:53

标签: c# winforms visual-studio-2010

我目前正在使用此代码替换完全匹配。然而,这不起作用,它也删除了其他单词出现的地方。

示例:

string pattern = "(?i)(flo)";
jobTitle = Regex.Replace("Florist of Vinyl Flowers of flo abc", pattern, string.Empty);

这是字符串:

   vinyl owers的orist

哪个错误应该只从字符串中删除flo,如果我使用:

string pattern = "(?i)\b(flo)\b";

它不匹配,但即使在那里有完整的单词也不匹配,没有匹配/

更新:

完整的代码运行如下:

splitter = wordToremoveTitle.Split('|');
if (splitter.Length > 0)
 {

  for (int t = 0; t < splitter.Length ; t++)
  {
  String pattern = @"(?i)\b(" + splitter[t] + ")\b";
  jobTitle = Regex.Replace(jobTitle, pattern, string.Empty);
  }

2 个答案:

答案 0 :(得分:1)

您需要弄清楚“单词”对您来说意味着什么,而不是使用正则表达式来定义它。

如果它们与“\ b”类别不匹配,则可能需要定义边界(即@“[\ t,.- $] +”“空白字符,字符串的开头/结尾,标点符号”)。如果需要,您可能需要使用@ \ w +“ - ”单词字符“类别来包含单词后面的单词的剩余部分。

参考 - Character classes

示例taht应匹配以“flo”开头的单词:

  string pattern = @"(?i)\b(flo\w+)\b";

答案 1 :(得分:1)

你是如此接近,正则表达式:(?i)\bflo\b

string pattern = @"(?i)\bflo\b";
jobTitle = Regex.Replace("Florist of Vinyl Flowers", pattern, string.Empty);

如果单词的意思是“花店”和“鲜花”而不是“花”,请使用此(?i)\b[^ ]*flo[^ ]*\b