正则表达式:如果特定单词在字符串中匹配,如何使IsMatch失败

时间:2012-01-30 08:36:51

标签: regex vb.net

我必须在字符串中搜索一些单词,例如狗,猫,狮子但是如果在字符串中找到蜥蜴,即使它包含猫,狗或狮子,我也希望正则表达式失败。

ismatch(pass) "dog|cat|lion" "This is not your average cat!"

ismatch (fail) [my regex statement] "This is not your average cat! It's a lizard."

[我的正则表达式声明] - 这里的正则表达式声明未知,请你帮我写这个声明吗?

单词空格和边界或低/大写不是问题。我通过

运行字符串
Replace(" ", "").Trim(" ").ToLower 

在移交给Regex之前。

3 个答案:

答案 0 :(得分:2)

尝试使用负面前瞻和负面观察

(?<!lizard.*)(?:dog|cat|lion)(?!.*lizard)

如果您使用正则表达式选项忽略大小写,则无需调用tolower。您可以通过将(?i)添加到正则表达式字符串的开头来指定它。

在js_dudley评论之后,这是一种构建字符串的方法

var exclude=new string[] { "lizard","eagle"};
var include=new string[] {"dog","cat","lion"};
var regexString=string.Format(
                                "(?<!({0}).*)(?:{1})(?!.*({0}))",
                                string.Join("|",exclude),
                                string.Join("|",include)
                             );
var regex=new Regex(regexString);

答案 1 :(得分:1)

如果因某种原因无法预测,你可以试试这个丑陋的伎俩:(dog|cat|lion)([^l]|l[^i]|li[^z]|liz[^a]|liza[^r]|lizar[^d])*$

答案 2 :(得分:0)

简单地使用(语法可能不完美)是不可接受的:

If nonLizardAnimalsRegex.IsMatch(yourString) And Not lizardRegex.IsMatch(yourString) Then
    ' String contains an animal but not "lizard"
End If