using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace ConsoleApplication1
{
public class Rule
{
public string Key { get; set; }
public string Name { get; set; }
public string Text { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Rule> rules = new List<Rule>();
rules.Add(new Rule { Key = "001", Name = "设备告警流水号", Text = @"[\s\n]*设备告警流水号[\s]*=[\s]*(?<deviecCode>\d{1,})" });
rules.Add(new Rule { Key = "002", Name = "网络流水号", Text = @"[\s\n]*网络流水号[\s]*=[\s]*(?<SiteCode>\d{1,})" });
rules.Add(new Rule { Key = "003", Name = "对象标识", Text = @"[\s\n]*对象标识[\s]*=[\s]*(?<ObjectFlag>[\.\d]{1,})" });
rules.Add(new Rule { Key = "004", Name = "对象名称", Text = @"[\s\n]*对象名称[\s]*=[\s]*(?<ObjectName>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})" });
rules.Add(new Rule { Key = "005", Name = "对象类型", Text = @"[\s\n]*对象类型[\s]*=[\s]*(?<ObjectType>\w+)" });
rules.Add(new Rule { Key = "006", Name = "网元标识", Text = @"[\s\n]*网元标识[\s]*=[\s]*(?<SiteElementFlag>[\.\d]{1,})" });
rules.Add(new Rule { Key = "007", Name = "网元名称", Text = @"[\s\n]*网元名称[\s]*=[\s]*(?<SiteElementName>\w+)" });
rules.Add(new Rule { Key = "008", Name = "网元类型", Text = @"[\s\n]*网元类型[\s]*=[\s]*(?<SiteElementType>\w+)" });
rules.Add(new Rule { Key = "009", Name = "告警ID", Text = @"[\s\n]*告警ID[\s]*=[\s]*(?<alarmId>\w+)" });
rules.Add(new Rule { Key = "010", Name = "告警名称", Text = @"[\s\n]*告警名称[\s]*=[\s]*(?<alarmName>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})" });
rules.Add(new Rule { Key = "011", Name = "告警种类", Text = @"[\s\n]*告警种类[\s]*=[\s]*(?<alarmItem>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})" });
rules.Add(new Rule { Key = "012", Name = "告警级别", Text = @"[\s\n]*告警级别[\s]*=[\s]*(?<alarmLevel>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})" });
rules.Add(new Rule { Key = "013", Name = "告警状态", Text = @"[\s\n]*告警状态[\s]*=[\s]*(?<alarmStatus>([A-z0-9\-\[\]\u4e00-\u9fa5]{1,})[\s]*&[\s]*([\u4e00-\u9fa5]){1,})" });
rules.Add(new Rule { Key = "014", Name = "告警类型", Text = @"[\s\n]*告警类型[\s]*=[\s]*(?<alarmType>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})" });
rules.Add(new Rule { Key = "015", Name = "发生时间", Text = @"[\s\n]*发生时间[\s]*=[\s]*(?<alarmTime>[0-9:\-\s]{1,})" });
rules.Add(new Rule { Key = "017", Name = "操作员", Text = @"[\s\n]*操作员[\s]*=[\s]*(?<oper>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})" });
List<string> datas = new List<string>();
string sr = @"(?<content><\+\+\+>{0}"
//+ @"[\s\n]*设备告警流水号[\s]*=[\s]*(?<deviecCode>\d{1,})"
//+ @"[\s\n]*网络流水号[\s]*=[\s]*(?<SiteCode>\d{1,})"
//+ @"[\s\n]*对象标识[\s]*=[\s]*(?<ObjectFlag>[\.\d]{1,})"
//+ @"[\s\n]*对象名称[\s]*=[\s]*(?<ObjectName>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})"
//+ @"[\s\n]*对象类型[\s]*=[\s]*(?<ObjectType>\w+)"
//+ @"[\s\n]*网元标识[\s]*=[\s]*(?<SiteElementFlag>[\.\d]{1,})"
//+ @"[\s\n]*网元名称[\s]*=[\s]*(?<SiteElementName>\w+)"
//+ @"[\s\n]*网元类型[\s]*=[\s]*(?<SiteElementType>\w+)"
//+ @"[\s\n]*告警ID[\s]*=[\s]*(?<alarmId>\w+)"
//+ @"[\s\n]*告警名称[\s]*=[\s]*(?<alarmName>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})"
//+ @"[\s\n]*告警种类[\s]*=[\s]*(?<alarmItem>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})"
//+ @"[\s\n]*告警级别[\s]*=[\s]*(?<alarmLevel>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})"
//+ @"[\s\n]*告警状态[\s]*=[\s]*(?<alarmStatus>([A-z0-9\-\[\]\u4e00-\u9fa5]{1,})[\s]*&[\s]*([\u4e00-\u9fa5]){1,})"
//+ @"[\s\n]*告警类型[\s]*=[\s]*(?<alarmType>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})"
//+ @"[\s\n]*发生时间[\s]*=[\s]*(?<alarmTime>[0-9:\-\s]{1,})"
// + @"[\s\n]*定位信息[\s]*=[\s]*(?<infoLocation>[A-z0-9\-\[\]\u4e00-\u9fa5\,\s=]{1,})"
// + @"[\s\n]*操作员[\s]*=[\s]*(?<oper>[A-z0-9\-\[\]\u4e00-\u9fa5]{1,})"
+ @"[\s\S]*?<\-\-\->)";
Regex r = null;
string sr0 = sr.Replace("{0}","");
r = new Regex(sr0);
List<string> list = new List<string>();
string s = File.ReadAllText("tt.txt", Encoding.GetEncoding("gb2312"));
bool isb = s.Contains("对象标识");
Console.WriteLine(isb);
MatchCollection m = r.Matches(s);
for (var i = 0; i < m.Count; i++){
datas.Add(m[i].Groups["content"].Value);
}
for (int i = 0; i < datas.Count; i++){
StringBuilder sb = new StringBuilder();
string data = datas[i];
foreach (Rule model in rules){
bool isHas = data.Contains(model.Name);
if (isHas){
sb.Append(model.Text);
}
}
string sr2 = string.Format(sr, sb.ToString());
r = new Regex(sr2);
MatchCollection ms = r.Matches(data);
for (int mcount = 0; mcount < ms.Count; mcount++)
{
Console.WriteLine(ms[mcount].Groups["alarmItem"].Value);
}
}
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine(datas.Count);
Console.Read();
}
}
}
<+++>
设备告警流水号 = 43575
网络流水号 = 122892
对象标识 = .3221229568.3221233664.3221291009.3221368833.3221336065.3221340239
对象名称 = FSHWBSC8-015-[0197]-大良桂畔
对象类型 = BTS
网元标识 = .3221229568.3221233664.3221291009
网元名称 = FSHWBSC8
网元类型 = BSC6000
告警ID = 65384
告警名称 = 防盗告警
告警种类 = 故障
告警级别 = 重要
告警状态 = 未确认 & 未恢复
告警类型 = 环境系统
发生时间 = 2008-11-25 11:45:10
定位信息 = 站点号=12,单板ID=87,单板号=0,通道号=255,支路号=255,小区号=65535,站点类型=18,机架号=0,机框号=0,槽位号=6
<--->
<+++>
告警握手 = 2008-11-25 11:50:10
<--->
<+++>
设备告警流水号 = 43263
网络流水号 = 120457
对象标识 = .3221229568.3221233664.3221291009.3221368833.3221336065.3221340258
对象名称 = FSHWBSC8-035-[0111]-大良商业
对象类型 = BTS
网元标识 = .3221229568.3221233664.3221291009
网元名称 = FSHWBSC8
网元类型 = BSC6000
告警ID = 65384
告警名称 = 防盗告警
告警种类 = 故障
告警级别 = 重要
告警状态 = 未确认 & 未恢复
告警类型 = 环境系统
发生时间 = 2008-11-25 06:55:33
定位信息 = 站点号=32,单板ID=87,单板号=0,通道号=255,支路号=255,小区号=65535,站点类型=18,机架号=0,机框号=0,槽位号=6
<--->
<+++>
设备告警流水号 = 43263
网络流水号 = 120457
对象标识 = .3221229568.3221233664.3221291009.3221368833.3221336065.3221340258
对象名称 = FSHWBSC8-035-[0111]-大良商业
对象类型 = BTS
网元标识 = .3221229568.3221233664.3221291009
网元名称 = FSHWBSC8
网元类型 = BSC6000
告警ID = 65384
告警名称 = 防盗告警
告警种类 = 故障
告警级别 = 重要
告警状态 = 已确认 & 已恢复
告警类型 = 环境系统
发生时间 = 2008-11-25 06:55:33
恢复时间 = 2008-11-25 06:55:38
确认时间 = 2008-11-25 07:00:36
定位信息 = 站点号=32,单板ID=87,单板号=0,通道号=255,支路号=255,小区号=65535,站点类型=18,机架号=0,机框号=0,槽位号=6
操作员 = < 系统 >
<--->
<+++>
设备告警流水号 = 43264
网络流水号 = 120458
对象标识 = .3221229568.3221233664.3221291009.3221368833.3221336065.3221340258
对象名称 = FSHWBSC8-035-[0111]-大良商业
对象类型 = BTS
网元标识 = .3221229568.3221233664.3221291009
网元名称 = FSHWBSC8
网元类型 = BSC6000
告警ID = 65384
告警名称 = 防盗告警
告警种类 = 故障
告警级别 = 重要
告警状态 = 未确认 & 未恢复
告警类型 = 环境系统
发生时间 = 2008-11-25 06:55:57
定位信息 = 站点号=32,单板ID=87,单板号=0,通道号=255,支路号=255,小区号=65535,站点类型=18,机架号=0,机框号=0,槽位号=6
<--->
<+++>
设备告警流水号 = 43264
网络流水号 = 120458
对象标识 = .3221229568.3221233664.3221291009.3221368833.3221336065.3221340258
对象名称 = FSHWBSC8-035-[0111]-大良商业
对象类型 = BTS
网元标识 = .3221229568.3221233664.3221291009
网元名称 = FSHWBSC8
网元类型 = BSC6000
告警ID = 65384
告警名称 = 防盗告警
告警种类 = 故障
告警级别 = 重要
告警状态 = 已确认 & 已恢复
告警类型 = 环境系统
发生时间 = 2008-11-25 06:55:57
恢复时间 = 2008-11-25 06:56:03
确认时间 = 2008-11-25 07:01:01
定位信息 = 站点号=32,单板ID=87,单板号=0,通道号=255,支路号=255,小区号=65535,站点类型=18,机架号=0,机框号=0,槽位号=6
操作员 = < 系统 >
<--->