使用正则表达式计算唯一身份用户?

时间:2013-03-12 12:47:04

标签: c# regex

我想定义一个正则表达式模式,它将在文件中提供唯一的用户计数。还有一件事我还想要应用长度计数,以便用户值不超过15个字符。  因此,我的代码将在下面提供的日志中返回2,因为它应该丢弃超过15的用户值。  记录文件格式:

 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;

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我不会使用Regex
请尝试使用string.Split()Distinct

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