2011-10-04 22 views

回答

1

你可以試試這個正則表達式。這應該根據您的規格工作。

Regex.IsMatch(subjectString, @"/\w+-(?:\d+\.){3}\d+-\d+-of-\d+.EXE/", 
                RegexOptions.Multiline) 
+0

太棒了。謝謝。我會接受這個答案。通過表達強制執行規則可能還有一個要求。我的意思是說這裏的軟件包名稱是AttDts-14.0.0.1-3-of-3.EXE,即3中的1和3以及3中的3,但如果有人誤將2中的4或9中的3不應該匹配,這是可能的嗎? – user393014

+0

是的,這是可能的。您可以使用:@「/ \ w + - (?:\ d + \。){3} \ d + - [1 | 2 | 3 | 4] -of- [1 | 2 | 3 | 4] .EXE/...這個正則表達式將檢查x的y,其中1 <= x,y <5,x和y之間沒有關係。如果你想強制x

+0

gotcha。感謝您的幫助 – user393014

2

你好你可以試試這個表達式:

([^\-]+)\-((?:\d+\.){3}\d+)\-(\d+)\-of\-(\d+)\.exe 

編輯 - 正則表達式

然後你就可以實現的方法有以下模式:

static bool isValidPackageName(string packageName) 
{ 
    String pattern = @"([^\-]+)\-((?:\d+\.){3}\d+)\-(\d+)\-of\-(\d+)\.exe"; 
    return Regex.Match(packageName, pattern, RegexOptions.IgnoreCase).Success; 
} 

編輯 - 改進方法

順便說一句,如果你不需要來驗證弦上的每個項目(產品名稱,版本,X,Y),你可以只是簡單做到以下幾點:

String input = "AttDts-14.0.0.1-1-of-3.EXE"; 
String pattern = @"([^\-]+)(?=[\-.])"; 

Regex regularExpression = new Regex(pattern); 
MatchCollection matchCollection = regularExpression.Matches(input); 

if (matchCollection.Count > 0) 
{ 
    int groupPosition = 0; 
    foreach (var group in matchCollection) 
    { 
     switch (groupPosition) 
     { 
      // {productName} 
      case 0: 
       Console.WriteLine("Product Name: {0}", group); 
       break; 
      // {version} 
      case 1: 
       Console.WriteLine("Version: {0}", group); 
       break; 
      // {X} 
      case 2: 
       Console.WriteLine("X: {0}", group); 
       break; 
      // of 
      case 3: 
       break; 
      // {Y} 
      case 4: 
       Console.WriteLine("Y: {0}", group); 
       break; 

     } 
     ++groupPosition; 
    } 
} 

編輯 - 斯普利特

或者你可以只是簡單的避免使用正則表達式:

static void Main(string[] args) 
{ 
    String input = "AttDts-14.0.0.1-1-of-3.EXE"; 
    String[] splits = input.Split(new char[] { '-' }); 

    int splitCounter = 0; 
    foreach (var split in splits) 
    { 
     switch (splitCounter) 
     { 
      case 0: 
       var productName = split; 
       Console.WriteLine("Product Name: {0}", productName); 

       break; 

      case 1: 
       var version = split; 
       Console.WriteLine("Version: {0}", version); 

       break; 

      case 2: 
       var x = split; 
       Console.WriteLine("X: {0}", x); 

       break; 

      case 3: 
       break; 

      case 4: 
       var y = split.Split(new char[] { '.' })[0]; 
       Console.WriteLine("Y: {0}", y); 
       break; 
     } 
     ++splitCounter; 
    } 
} 
+1

關於選項2,我命名的捕獲組的大風扇...例如:'@「( [^ \ - ] +?)\ - ((?:?\ d + \ 。){3} \ d +)\ - (? \ d +)\ - \ - (? \ d +)\。exe「'。然後你可以使用'match.Groups [「Name」]'並且對你的搜索模式做出更改。 – Reddog

+0

@Reddog,+1指出這一點! – Eder