1

ファイル内の一意のユーザー数を提供する正規表現パターンを定義したいと思います。もう1つ、Usersの値が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;
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。代わりにと
を使用してみてください。string.Split()Distinct

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