2013-03-12 53 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