我正在尝试创建一个函数,当字符串没有特定的字符组时返回true(在本例中,该组是“DontMatchMe”)
以下示例:
example1
examDontMatchMeple2
example3
examDontMatchMeple4
example4
有效匹配是:
example1
example3
example4
我的第一个选择是使用模式.*(?!DontMatchMe).*
,但.*
消耗所有内容,匹配始终为真。
请注意,我实际使用的字符串上的值是随机的。例如,我不能使用“exe”来构建正则表达式。 “DontMatchMe”也是随机的。
答案 0 :(得分:2)
要排除特定字词,您可以使用以下格式:^(?!.*DontMatchMe).+
为了避免.*
消耗所有内容的问题,您可以将模式锚定到字符串的开头。模式细分如下:
^
:锚定到字符串的开头(?!.*DontMatchMe)
:与任何字符和要忽略的文字匹配的否定预测.+
:最后,匹配一个或多个字符(只要前瞻不匹配就会发生)示例:
string[] inputs =
{
"example1",
"examDontMatchMeple2",
"example3",
"examDontMatchMeple4",
"example4"
};
string ignoreText = "DontMatchMe";
string pattern = String.Format("^(?!.*{0}).+", Regex.Escape(ignoreText));
foreach (var input in inputs)
{
Console.WriteLine("{0}: {1}", input, Regex.IsMatch(input, pattern));
}
答案 1 :(得分:0)
如果它是您要检查的简单非正则表达式字符串,则只需使用Contains
方法并反转结果:
bool doesNotContain(string s, string group) {
// error check for nulls first (not included here)
return !s.Contains(group);
}
如果您希望您的小组可能成为正则表达式,您仍然可以使用相同的原则。寻找你不想要的模式,如果它返回false,否则返回true。这可能更容易阅读和理解,特别是对于不熟悉正则表达式的更高级概念的人,例如负向前瞻。