【问题标题】:Regex to match multiple string [duplicate]正则表达式匹配多个字符串[重复]
【发布时间】:2016-03-22 09:41:50
【问题描述】:

我想解析一个日志文件来检索timetypemessage。一个日志文件是这样构造的:

[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 => 这就是我们需要更多信息的地方
  • 什么是fileLogs?行数组,单行还是什么?
  • fileLogs 只是一个包含上述示例文本的字符串。结果是整行。
  • 好的,然后看看 xanatos 的答案。小心,如果你想阅读整个日志文件,你需要使用Regex.Matches 否则你只会得到第一个出现
  • 对我来说 string fileLogs = "[08:52:18] [ERROR] Ceci doit aparaitre"; var result = Regex.Match(fileLogs, @"\[(.+)\] \[(.+)\] (.+)"); 工作得很好

标签: c# regex


【解决方案1】:

删除最初的/ 和最后的/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 是整行。
  • @Sakuto 在 RegexStorm 这样的网站上可以正常工作,但在我的代码上却不行 然后它不能在 RegexStorm 上正常工作:-)
  • 谢谢,在你写它的时候就知道了,谢谢(:/,/g 是为了测试目的,它不在我的初始代码中,但我在处理 Groups 属性时遇到了问题。
猜你喜欢
  • 1970-01-01
  • 2021-04-11
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
相关资源
最近更新 更多