我正在使用regex
和C#
使用
Regex regex = new Regex(@"\b" + word + @"\b");
我如何修改我的Regex只检测单词,如果它前面有空格,后跟空格或后跟点?
示例:
this.Button.Value - 应该匹配 this.value - 应匹配
document.thisButton.Value - 不应该匹配
答案 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);
模式匹配:
(?<=\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