【发布时间】:2011-05-25 17:46:44
【问题描述】:
我必须解析的所有数据当前都存储在 StringBuilder 中,我想将其解析到我的类列表中:
StringBuilder data = new StringBuilder(length);
所以我将我的班级分配到一个列表中:
public class Messages
{
public DateTime Sent { get; set; }
public string User {get; set; }
public MessageType TypeUsed { get; set; }
public string Message { get; set; }
}
public enum MessageType
{
System,
Info,
Warn
}
public List<Messages> myList = new List<Messages>();
现在这里有一些我需要解析的消息示例:
[13:49:13] [System Message] <Username> has openned blocked website
[13:49:14] <Username> accessed file X
[13:52:46] [System Message] <Username> has entered this room
[13:52:49] [System Message] <Username> has left this room
我怀疑什么是解析它的最佳方法。
时间存在于所有消息中。
Usernaem 始终使用<>
当没有[System Message] 或[Warn Message] 时,它是信息类型消息。
消息是剩下的例子:
has left this room
accessed file X
has openned blocked website
现在我还在考虑使用什么。
我可以使用正则表达式来提取每个字符串,如下所示:
Regex getData = new Regex(@"^\[(\d{1,2}:\d{1,2}:\d{1,2})\] \[([A-Za-z]+)\] ");
但是我基本上需要对每条消息进行多次检查,所以我对它不太满意。
例如考虑使用拆分:
string line = item.Replace("[", "").Replace("]", "");
string[] fields = line.Split(' ');
然后我会检查拆分案例会很容易检测到 MessageType 但我认为不是那么可靠。
我想要一些建议和想法,以了解我如何才能做到这一点?
也许我只是让逻辑过于复杂:/
【问题讨论】:
标签: c# string parsing class .net-3.5