正则表达式的应用1

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
操作员  =   < 系统 >
<--->

原文地址:https://www.cnblogs.com/luluping/p/1626045.html