有问题的日志文件行:
[2018-10-25 19:40:34] [Output] : (CHAT-Type) User: message
那么日期和输出可以按字符数分割吗?
然后我可以从[]中解析日期。
那会留给我
(CHAT-Type) User: message
现在,我想将其分为聊天类型,用户名和消息。
这真的伤害了我的头,在C#中如何做所有这些事情。
基本上我需要像这样出来: 约会时间 聊天类型 用户 信息 所有单独的变量
答案 0 :(得分:3)
这看起来像RegEx那样的问题:)
这是一个匹配单行(带有命名捕获组)的正则表达式
^\[(?'dateTime'.+)\] \[(?'output'.+)\] : \((?'type'.+)\) (?'user'.+): (?'message'.+)$
Regexr链接以尝试在线:https://regexr.com/421p4
由于我在所有区域都使用了.+
,所以没有字符限制。它可能会中断(例如,:
之前和之后如果没有空间。)但是可以对其进行进一步改进以使其更加灵活。如果您愿意,我可以写一封。
此外,如果您使用的是类似file.ReadAllText()
的方法,则需要使用多行标志来匹配所有行。 (Regex.Match(input, pattern, RegexOptions.Multiline)
)
否则(例如,如果要遍历各行)没关系,因为字符串中没有\n
。
using System.Text.RegularExpressions;
// ...
string pattern = @"^\[(?<dateTime>.+)\] \[(?<output>.+)\] : \((?<type>.+)\) (?<user>.+): (?<message>.+)$";
string message = "[2018-10-25 19:40:34] [Output] : (CHAT-Type) User: message";
var match = Regex.Match(message, pattern);
您可以通过match
变量访问匹配项,如下所示:
match.Groups["dateTime"].Value; // "2018-10-25 19:40:34"
match.Groups["user"].Value; // "User"
match.Groups["message"].Value; // "message"
答案 1 :(得分:0)
这是拆分所有值的方式:
string inputValue = "(CHAT-Type) User: message";
int braceCloseIndex = inputValue.IndexOf(')');
int colonIndex = inputValue.IndexOf(':');
string chatType = inputValue.Substring(1, braceCloseIndex - 1).Trim();
string userName = inputValue.Substring(braceCloseIndex + 1, colonIndex - braceCloseIndex - 1).Trim();
string message = inputValue.Substring(colonIndex + 1).Trim();
Console.WriteLine($"chatType: {chatType}, userName: {userName}, msg: {message}");