我必须在字符串中搜索一些单词,例如狗,猫,狮子但是如果在字符串中找到蜥蜴,即使它包含猫,狗或狮子,我也希望正则表达式失败。
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之前。
答案 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