[2010-8-6 16:49:35] Kelvin: 1011aasfsadfasdfasdfsd
[2010-8-6 16:51:48] ebayb: 第一行第二行第三行[2010-8-6 16:52:22] Kelvin: OK
这是一个聊天记录的文本文件,如可来获取每一条聊天记录?
时间,用户名,聊天内容。
[2010-8-6 16:51:48] ebayb: 第一行第二行第三行[2010-8-6 16:52:22] Kelvin: OK
这是一个聊天记录的文本文件,如可来获取每一条聊天记录?
时间,用户名,聊天内容。
解决方案 »
- C# Unicode的十六进制 转成 字符
- 跪求 asp.net 长文章分页实现思路和代码
- exchange2003插件开发求教
- 请教关于ds.Tables[0].Select("LXID='"+a+"'")[0]["lxmc"].ToString()
- c#中抓取网页时,乱码问题
- 请推荐除PowerDesign之外的数据建模工具
- client response content type “text/html charset=utf-8”, but expect " text/xml"
- 大家新年好!!!
- 谁来给我举一个回调函数的例子,越详细越好。
- 如何实现两个web窗体之间的字符传递?
- 高分求openfiledialog的源代码
- 怎样自定义有参数的类?给个实例好吗?
string str = "[2010-8-6 16:49:35] Kelvin: 1011aasfsadfasdfasdfsd"; Regex reg = new Regex(@"(\[.*?\]) (\w*): (.*)"); foreach (Match m in reg.Matches(str))
{
Console.WriteLine(m.Groups[1].Value.Trim(']').Trim('['));
Console.WriteLine(m.Groups[2].Value);
Console.WriteLine(m.Groups[3].Value);
}
MatchCollection mc = Regex.Matches(yourStr);
foreach(Mathch m in mc)
{
//m.Groups["datetime"].Value就是时间日期部分
//m.Groups["name"].Value就是说话的人名
//m.Groups["text"].Value就是正文内容
}
除了写给你那么清晰明了的,m.Value就是一条完整的纪录。
using System.Text.RegularExpressions;public class Program
{
[STAThread]
static void Main(string[] args)
{
string yourStr = @"[2010-8-6 16:49:35] Kelvin: 1011aasfsadfasdfasdfsd
[2010-8-6 16:51:48] ebayb: 第一行";
Regex reg = new Regex(@"(?isn)\[(?<datetime>\d{4}-([1-9]|1[012])-([1-9]|[1-3][0-9]) (\d|1[0-9]|2[012])(:[1-5]?\d){2})\]\s*(?<name>[^:]+)\s*:\s*(?<text>.+?)(?=\[\d{4}-([1-9]|1[012])-([1-9]|[1-3][0-9]) (\d|1[0-9]|2[012])(:[1-5]?\d){2}\]|$)");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
Console.WriteLine("[一条数据的完整内容]");
Console.WriteLine(m.Value);//完整内容
Console.WriteLine("[时间日期]");
Console.WriteLine(m.Groups["datetime"].Value);//m.Groups["datetime"].Value就是时间日期部分
Console.WriteLine("[说话人]");
Console.WriteLine(m.Groups["name"].Value);//m.Groups["name"].Value就是说话的人名
Console.WriteLine("[说的内容]");
Console.WriteLine(m.Groups["text"].Value);//m.Groups["text"].Value就是正文内容
Console.WriteLine("-------------------神奇的分割线-------------------");
}
Console.ReadKey();
}
}输出:[一条数据的完整内容]
[2010-8-6 16:49:35] Kelvin: 1011aasfsadfasdfasdfsd[时间日期]
2010-8-6 16:49:35
[说话人]
Kelvin
[说的内容]
1011aasfsadfasdfasdfsd-------------------神奇的分割线-------------------
[一条数据的完整内容]
[2010-8-6 16:51:48] ebayb: 第一行
[时间日期]
2010-8-6 16:51:48
[说话人]
ebayb
[说的内容]
第一行
-------------------神奇的分割线-------------------
[2010-8-6 16:51:48] ebayb 全发中国邮政I92A: friend!
这个匹配出来怎么出现了乱码:
[2010-8-6 16:51:48] ebayb ????й?????I92A: friend!
是模式修饰
i:忽略大小写
s:单行模式.可以捕获\n
n:取消未命名分组捕获。减少堆栈创建。
如果你原文没错。就不会有错,你读文件时候是不是Encoding用的不对。