我一直在寻找一个很好的指南,但我无法弄清楚正则表达式的语法。
我需要解析以下字符串:
[2013.11.22 22:50:30]系统>姓氏姓氏被踢了 主持人
我需要提取的变量应该看起来像这样:
[ <yyyy>.<MM>.<dd> <hh>:<mm>:<ss> ] System > <username> was kicked by <moderatorname>
所以,基本上是时间戳,谁被谁(字母数字名称)踢了。这是令我困惑的一点。用户名和主持人的姓名都可能是 2个甚至3个部分除以空格......可能我猜用户名可能是“被踢了”,这肯定会搞砸解析。
之前我没有做过很多正则表达式,所以我在语法上并不擅长。看一些指南我到目前为止:
string text = "[ 2013.11.22 22:50:30 ] System > Firstname Surname was kicked by Moderator"
var input = text.ToLower();
Match m = Regex.Match(input, @"(?i:\[\s)(?<year>\d{4})\.(?<month>\d{1,2})\.(?<day>\d{1,2})\s(?<hour>\d{1,2})\:(?<minute>\d{1,2})\:(?<second>\d{1,2})\s\]");
这适用于解析时间戳,但后面的文本部分给了我一些麻烦。我真的不确定如何处理这个问题。
感谢任何帮助,谢谢
答案 0 :(得分:2)
使用它:
\[\s*(?<yyyy>\d+)\.(?<MM>\d+)\.(?<dd>\d+)\s+(?<hh>\d+)\:(?<mm>\d+)\:(?<ss>\d+)\s+\] System > (?<username>.+) was kicked by (?<moderatorname>\w+)
演示:
答案 1 :(得分:1)
您可能只想使用正则表达式,如果是这样,那么公平。否则,我可以建议这对于日期部分可能更简单。
string date = "2013.11.22 22:50:30";
DateTime dateTime = DateTime.ParseExact(date , "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
或使用DateTime.Parse(),如果格式不太确定。
我会看一下一个大的正则表达式,但我的方法是用正则表达式拾取用户名,如下所示:
System > (((?!System|\swas).)+)\swas (whoops, I'm picking up addition things)
和
(?<=kicked by).*