正则表达式匹配多个字符串

3
我希望能够解析日志文件,以检索时间类型消息。日志文件的结构如下:
[08:52:18] [ERROR] Ceci doit aparaitre 
[08:52:18] [WARN] Bonjour 

我目前是这样做的:

var result = Regex.Match(fileLogs, @"/\[(.+)\] \[(.+)\] (.+)/g");

这段代码在 RegexStorm 等网站上运行良好,但在我的代码中则不行。我真的不明白为什么。
我想获取这些元素以创建一个新的Log实例(它只有3个属性:timetypemessage)。

“but not on my code” => 那就需要更多的信息了。 - Thomas Ayoub
1
fileLogs是什么?是一组行、单行还是其他什么? - Nitro.de
fileLogs只是一个包含上面示例文本的字符串。结果是整行内容。 - LoïcR
1
好的,那就看xanatos的答案吧。如果你想一次读取整个日志文件,要小心使用Regex.Matches,否则你只会得到第一个出现的结果。 - Nitro.de
对我来说,string fileLogs = "[08:52:18] [ERROR] Ceci doit aparaitre"; var result = Regex.Match(fileLogs, @"\[(.+)\] \[(.+)\] (.+)"); 运行得非常好。 - Nitro.de
1个回答

4
删除开头的/和结尾的/g。你是在使用C#进行编程,而不是Javascript。
var result = Regex.Match(fileLogs, @"\[(.+)\] \[(.+)\] (.+)");

这是一个 Ideone 示例,展示它现在的运行情况:https://ideone.com/QkTYwS

为了正确分割它,您可以使用类似以下代码:

var result = Regex.Matches(fileLogs, @"\[(.+)\] \[(.+)\] (.+)");

foreach (Match match in result)
{
    string time = match.Groups[1].Value;
    string type = match.Groups[2].Value;
    string messsage = match.Groups[3].Value;
    Console.WriteLine("{0} | {1} | {2}", time, type, messsage);
}

请注意使用Regex.Matches方法。
Ideone: https://ideone.com/lUxnSs

我也尝试过,但是result.Value是整行的内容。 - LoïcR
@Sakuto 在RegexStorm这样的网站上可以正常工作,但在我的代码中却不能 那么它在RegexStorm上也不是正常工作的 :-) - xanatos
谢谢,当你写的时候我已经想通了,谢谢(: /,/g是为了测试目的,它不在我的初始代码中,但我在处理Groups属性时遇到了问题。 - LoïcR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接