2015-10-20 62 views
-2

我需要能夠匹配一個句子的單詞序列,並試圖使用正則表達式,但由於某種原因,正則表達式評估「不」和「不」相等。代碼仍然處於模擬階段,但這個想法是一個系統拋出一個錯誤,我需要看看是否包含一個特定的語言。這裏是代碼。正則表達式評估「不」和「不」等於

 string message = "The field could not be calculated because the following field(s) have no value or have invalid values: [field1]."; 
     string[] sentences = message.Split(' '); 

     string pattern = "have no value or have invalid values:"; 
     string[] pattern1 = pattern.Split(' '); 

     string[] result = new string[pattern1.Length]; 
     int i = 0; 

     foreach (string p in pattern1) 
     { 
      foreach (string s in sentences) 
      { 
       System.Console.Write("{0,24}", s); 

       if (System.Text.RegularExpressions.Regex.IsMatch(s, p, System.Text.RegularExpressions.RegexOptions.IgnoreCase)) 
       { 
        System.Console.WriteLine(" (match for '{0}' found)", p); 
        result[i] = s.Trim(); 
        i++; 
        break; 
       } 
       else 
       { 
        System.Console.WriteLine(); 
       } 
      } 
     } 

     bool isEqual = pattern1.SequenceEqual(result); 
     if (isEqual) 
     { 
      System.Console.WriteLine("Match Found"); 
     } 
     else 
     { 
      System.Console.WriteLine("Match NOT Found"); 
     } 
+1

好了,讓我們看看你的正則表達式的搜索表達式.... –

+0

你想在正則表達式無法識別以外的任何其他確切的字符串'沒有'? –

+0

你究竟想在這裏完成什麼?我有一種感覺,如果你只是檢查一個給定的字符串是否有特定的模式,你不需要所有的代碼。 –

回答

2

你的代碼是在這種情況下,使用正則表達式是no(從pattern1,您可以通過拆分have no value or have invalid values:了)

not肯定是對正則表達式模式no比賽 - 因爲not開始與no

如果你想更具體的你可以介紹一下word boundary \b

//other code 

foreach (string p in pattern1) 
{ 
    foreach (string s in sentences) 
    {    
     //wrap your pattern in word boundaries 
     string pat = "\b" + p + "\b" 

     //use the new wrapped pattern 
     if (System.Text.RegularExpressions.Regex.IsMatch(s, pat, System.Text.RegularExpressions.RegexOptions.IgnoreCase)) 
     { 
      System.Console.WriteLine(" (match for '{0}' found)", pat); 
     } 
     else 
     { 
      //... 
     } 
    } 
} 
+0

「不,只是不?」 ;) - 轉義正則表達式很難。 –