我想在“WX GSA搜索”中计算总“经过时间”。以下是我的日志文件:
WX Search =服务器:nomos-scanner.corp.adobe.com用户:vibsharm appGUID: 经过的时间:875毫秒SaveSearchID:361 WX GSA Search = 服务器:nomos-scanner.corp.adobe.com用户:gulanand appGUID:wx Elapsed 时间:890ms SaveSearchID:361 WX GSA Search = 服务器:nomos-scanner.corp.adobe.com用户:vibsharm appGUID:wx Elapsed 时间:887毫秒SaveSearchID:361 WX GSA搜索= 服务器:nomos-scanner.corp.adobe.com用户:gulanand appGUID:wx Elapsed 时间:875.5ms SaveSearchID:361 WX GSA Search = 服务器:nomos-scanner.corp.adobe.com用户:vibsharm appGUID:wx Elapsed 时间:877.6ms SaveSearchID:361
我编写的代码但无效。 Plz检查正则表达式是否正常:
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();
答案 0 :(得分:0)
如果你唯一的问题是正则表达式,试试这个。
Regex re = new Regex(@"Elapsed Time:(?<timevalue>\d+(?:\.\d)?)ms");
答案 1 :(得分:0)
好吧,你的正则表达式并不完全无效,但可以改进。
E.g:
Regex regex = new Regex(@"Elapsed Time:\s*(?<value>\d+\.?\d*)\s*ms");
“ms”之前的“+”表示任意数量的字符应重复一次或多次 - 然后尝试任何可能的组合以使其最合适并且需要时间。
我改变了*。?到\ d +。?\ d *只接受带有可选小数的数值。
我还将(?&lt; timevalue&gt; ...)更改为(?&lt; value&gt; ...所以它与您的代码示例匹配。
祝你好运。
答案 2 :(得分:0)
您可以使用String.Split
和一点Linq
来解析经过的时间;
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());