我该怎么办呢。
new Regex("([^my]|[^test])").Replace("Thats my working test", "");
我会得到这个:
my test
但我会得到一个空字符串,因为一切都将被替换为无。
提前谢谢你!
答案 0 :(得分:5)
您可以使用这个基于前瞻性的正则表达式:
new Regex("(?!\b(?:my|test)\b)\b(\w+)\s*").Replace("Thats my working test", "");
//=> my test
您在字符类中使用否定不正确:([^my]|[^test])
由于在内部字符类中,每个字符都被单独检查而不是字符串。
答案 1 :(得分:0)
使用此正则表达式替换:
new Regex("\b(?!my|test)\w+\s?").Replace("Thats my working test", "");
这是regex demo!
\b
在我们要检查之前断言位置。(?!
否定前瞻 - 断言我们的匹配是不:my|test
字符序列“我的”或“测试”。)
\w+
然后匹配这个词,因为这就是我们想要的。\s?
如果它在那里,也会废弃后面的空格。答案 2 :(得分:-1)
我建议使用下一个regEx:
var res = new Regex(@"my(?:$|[\s\.;\?\!,])|test(?:$|[\s\.;\?\!,])").Replace("Thats my working test", "");
更新:甚至更简单:
var res = new Regex(@"my($|[\s])|test($|[\s])").Replace("Thats my working test", "");
Upd2:如果你不知道你会用什么词,你可以更灵活地做到:
private string ExeptWords(string input, string[] exept){
string tmpl = "{0}|[\s]";
var regexp = string.Join((exept.Select(s => string.Format(tmpl, s)),"|");
return new Regex(regexp).Replace(("Thats my working test", "");
}