2013-03-12 37 views
1

我想定義一個正則表達式模式,它將在文件中給出唯一的用戶數。還有一件事我也想應用長度計數,使用戶值不超過15個字符。 所以我的代碼將在下面,因爲它應該放棄用戶的價值超過15長日誌 文件格式提供的日誌返回2:使用正則表達式來計算唯一用戶?

User:fd441f1f-22c0-45d2-b020-32e1e6a15a73 
User:fd441f1f-22c0-45d2-b020-32e1e6a15f43 
User:fd441f1f-24g0-45d2-b050-32e1e6a15a73 
User: karansha 
User: gulanand 

代碼我想:

Regex regex = new Regex(@"User:\s*(?<username>.*?)\s"); 
      MatchCollection matches = regex.Matches(x); 
      foreach (Match match in matches) 
      { 
       var user = match.Groups["username"].Value; 
       if (!users.Contains(user)) users.Add(user); 
      } 
      int numberOfUsers = users.Count; 

回答

1

我不會爲此使用Regex
請嘗試使用string.Split()Distinct來代替。

int numberOfUsers = x.Split(new string[] { "User:" }, StringSplitOptions.RemoveEmptyEntries) 
        .Distinct() 
        .Count(name => name.Length < 15); 
2

你可以這樣做與LINQ:

int numberOfUsers = regex.Matches(x) 
         .Cast<Match>() 
         .Select(m => m.Groups["username"].Value) 
         .Distinct() // pick only unique names 
         .Count(name => name.Length < 15); // calculate count 

或者沒有正則表達式:

int numberOfUsers = File("log.txt") 
         .ReadLines() 
         .Select(line => line.Replace("User:", "").Trim()) 
         .Distinct() 
         .Count(name => name.Length < 15); 
+0

長度算什麼?你在我的日誌中看到我不想讓我的程序計算超過長度爲15的用戶值。你能幫助我使用正則表達式嗎? – 2013-03-12 12:53:26

+0

@KamalRai只需在Count方法中添加條件。它將只計算符合該條件的用戶。 – 2013-03-12 12:53:44

+0

thanks.it工作。 – 2013-03-12 13:16:54