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