2012-01-30 25 views
1

たとえば、dog、cat、lionのように文字列を検索する必要がありますが、文字列中にlizardが見つかったとしても正規表現は失敗します。それは猫、犬またはライオンを含んでいます。Regex:特定の単語が文字列内で一致する場合、IsMatchを失敗させる方法

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." 

[私の正規表現の文] - ここでの正規表現の文が不明である、あなたはこの文を書くために私を助けてくださいことができますか?

ワードスペースと境界または大文字/小文字は関係ありません。 Regexへのハンドオーバ前に、文字列を

Replace(" ", "").Trim(" ").ToLower 

まで実行します。あなたはTOLOWERを呼び出す必要はありませんケースを無視する正規表現のオプションを使用する場合

答えて

2

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

後ろに否定先読みと否定的な外観を使用して、これを試してみてください。正規表現文字列の先頭に(?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

これは完全に動作します。ありがとうございました。私はちょうどトカゲを使って単語を追加したいのか知りたかったのですが、トカゲの後など。 (?<!lizard | mouse。*)(?:dog | cat | lion)(?!。*トカゲ|マウス)??? –

+1

@js_Dudleyおそらく大括弧を使ってifが正しい単語を比較するようにしたいと思います。 '(?<!(lizard | mouse)。*)(?:dog | cat | lion)マウス)) ' –

0

文字列を構築するための方法です後は、(構文は完璧ではないかもしれない)だけで使用する許容されていません。

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

先読みでない場合可能であれば、この醜いトリックを試すことができます:(dog|cat|lion)([^l]|l[^i]|li[^z]|liz[^a]|liza[^r]|lizar[^d])*$

関連する問題