2011-01-18 57 views
3

有以下情況我如何使可選參數的正則表達式在C#

我要匹配像

abc#(x,-12d) 

or 

abc#(x,-12d, 24d) etc. 

這意味着最後一個參數是可選。

我已經做了正則表達式,它的工作原理,但因爲我不知道如何使可選,今後我使用兩個不同的regExpression。

public static bool ValidFn(string input) 
     {   
      string regEx1 = @"^[a-zA-Z]*#\([A-Za-z0-9]+,[-|+]?\d+[dwmqy],[-|+]?\d+[dwmqy]\)"; 
      string regEx2 = @"^[a-zA-Z]*#\([A-Za-z0-9]+,[-|+]?\d+[dwmqy]\)"; 
      Regex r1 = new Regex(regEx1); 
      Regex r2 = new Regex(regEx2); 
      Match m1 = r1.Match(input); 
      Match m2 = r2.Match(input); 
      if (m1.Success || m2.Success) return true; 
      else return false; 
     } 

我怎樣才能讓regExp1可選,這樣我可以消除使用regExp2的。

由於

回答

5

在正則表達式的?字符指 「重複0或1時間」。因此,它使得語句是可選的。

您想捕獲最後一個「,24d」。你需要包裝什麼捕獲「,24d」與?字符。

此正則表達式會做:

string regEx1 = @"^[a-zA-Z]*#\([A-Za-z0-9]+,[-|+]?\d+[dwmqy](,\s*[-|+]?\d+[dwmqy])?\)"; 

注意,我添加了一個\s*,

0

選裝件都標有?後拍照白色空間,是不是?您已經在[-|+]?中使用過它。