1

我想定义一个正则表达式模式,它将在文件中提供唯一用户计数。我还想应用长度计数,使用户值不超过 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;
4

2 回答 2

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);
于 2013-03-12T12:50:39.280 回答
1

我不会Regex为此使用 a 。
尝试使用string.Split()andDistinct代替。

int numberOfUsers = x.Split(new string[] { "User:" }, StringSplitOptions.RemoveEmptyEntries)
                     .Distinct()
                     .Count(name => name.Length < 15);
于 2013-03-12T12:53:23.817 回答