使用正则表达式检测单词后跟点或空格

时间:2016-04-01 12:23:01

标签: c# regex

我正在使用regexC#使用

查找特定单词的出现次数
Regex regex = new Regex(@"\b" + word + @"\b");

我如何修改我的Regex只检测单词,如果它前面有空格,后跟空格或后跟点?

示例:

this.Button.Value - 应该匹配 this.value - 应匹配

document.thisButton.Value - 不应该匹配

4 个答案:

答案 0 :(得分:1)

Regex regex = new Regex(@"((?<=( \.))" + word + @"\b)" + "|" + @"(\b" + word + @"[ .])");

但请注意,如果word包含在正则表达式中具有特殊含义的字符,则可能会导致问题。我假设word仅包含字母数字字符。

答案 1 :(得分:1)

如果我理解你的话:

Regex regex = new Regex(@"\b" + (word " " || ".") + @"\b");

答案 2 :(得分:1)

当关键字用空格括起来或者后跟一个点时,你可以使用lookarounds和alternation来检查2种可能性:

var line = "this.Button.Value\nthis.value\ndocument.thisButton.Value";
var word = "this";
var rx =new Regex(string.Format(@"(?<=\s)\b{0}\b(?=\s)|\b{0}\b(?=\.)", word));
var result = rx.Replace(line, "NEW_WORD");
Console.WriteLine(result);

请参阅IDEONE demoregex demo

模式匹配:

  • (?<=\s)\bthis\b(?=\s) - 整个单词“this”前面有空格(?<=\s),后跟空格(?=\s)
  • | - 或
  • \bthis\b(?=\.) - 整个单词“this”后跟文字.(?=\.)

由于lookarounds不消耗字符(正则表达式索引保持原样),与它们匹配的字符不会放在匹配值中,因此在替换期间不会受到影响。

答案 3 :(得分:0)

(?<=...)匹配组会检查先前和(?=...)以下检查, 不带 将其包括在匹配中。

Regex regex = new Regex(@"(?<=\s)\b" + word + @"\b|\b" + word + @"\b(?=[\s\.])");

编辑:模式已更新。

编辑2:在线测试:http://ideone.com/RXRQM5