0

我想在“WX GSA 搜索”中计算总“经过时间”。以下是我的日志文件:

WX 搜索 = 服务器:nomos-scanner.corp.adobe.com 用户:vibsharm appGUID:wx 已用时间:875 毫秒 SaveSearchID:361 WX GSA 搜索 = 服务器:nomos-scanner.corp.adobe.com 用户:gulanand appGUID:wx 已用时间:890 毫秒 SaveSearchID:361 WX GSA 搜索 = 服务器:nomos-scanner.corp.adobe.com 用户:vibsharm appGUID:wx 已用时间:887 毫秒 SaveSearchID:361 WX GSA 搜索 = 服务器:nomos-scanner.corp.adobe.com 用户: gulanand appGUID: wx Elapsed Time:875.5ms SaveSearchID:361 WX GSA Search = Server:nomos-scanner.corp.adobe.com 用户:vibsharm appGUID: wx Elapsed Time:877.6ms SaveSearchID:361

我写的代码但不工作。请检查正则表达式是否正常:

string searchKeyword = "WX GSA Search";
string fileName = @"C:\Users\karan\Desktop\Sample log file.txt";
string[] textLines = File.ReadAllLines(fileName);

List<string> results = new List<string>();

foreach (string line in textLines)
{
    if (line.Contains(searchKeyword))
    {
        results.Add(line);
    }
}

string x = string.Join(",",results);

List<string> users = new List<string>();
Regex regex = new Regex(@"Elapsed Time:\s*(?<timevalue>.*?)+ms");
MatchCollection matches = regex.Matches(x);

foreach (Match match in matches)
{
    var user = match.Groups["value"].Value;
    if (!users.Contains(time)) users.Add(time);
}

string[] s = users.ToArray();
4

3 回答 3

0

如果你唯一的问题是正则表达式,试试这个。

Regex re = new Regex(@"Elapsed Time:(?<timevalue>\d+(?:\.\d)?)ms");
于 2013-03-03T08:17:08.510 回答
0

好吧,您的正则表达式并非完全无效,但可以改进。

例如:

Regex regex = new Regex(@"Elapsed Time:\s*(?<value>\d+\.?\d*)\s*ms");

“ms”之前的“+”意味着任意数量的字符应该重复一次或多次 - 然后它会尝试任何可能的组合以使其最适合,这需要时间。

我改变了 *.? 到 \d+.?\d* 只接受带有可选小数的数值。

我还将 (?< timevalue>... 更改为 (?< value>... 所以它与您的代码示例匹配。

祝你的任务好运。

于 2013-03-03T08:19:27.603 回答
0

您可以使用String.Splitand 一点Linq来解析 Elapsed time;

   TimeSpan elapsedTime = TimeSpan.FromMilliseconds(File.ReadAllLines("c:\\log.txt")
        .Where(line => line.Contains("Elapsed Time:"))
        .Select(line => line.Split(new string[] { "Elapsed Time:"}, StringSplitOptions.RemoveEmptyEntries).Last().Split(' ').First())
        .Select<string,double>(time => time.EndsWith("ms") ? double.Parse(time.Replace("ms","").Trim()) 
                                     : time.EndsWith("s") ? double.Parse(time.Replace("s","").Trim()) * 1000.0 : 0.0 ).Sum());
于 2013-03-03T09:43:30.043 回答