我的txt中有很多行,这些行大概可以归结为两类:
一种是:
<event logger="root" timestamp="2010-09-30T13:43:59.1986333+08:00" level="ERROR" thread="4104" domain="Intel.AstraFw.ScHostProcess.exe" username="GAR\ukm01lma00sc01"><message>
另一种是:
<event logger="root" timestamp="2010-09-21T10:07:17.4442811+08:00" level="ERROR" thread="ScHost Hosting Thread" domain="Intel.AstraFw.ScHostProcess.exe" username="CKM05LMA00SC02\Administrator"><message>现在我想要一条正则语句,能把这两种行中红色高亮的部分都提取出来。也就是说1条语句能提取2类句段。
拜求达人!

解决方案 »

  1.   

    username="([a-zA-Z]+\\)?([^"]+)
    取分组2
      

  2.   

            public static void Test()
            {
                string html = @"<event logger=""root"" timestamp=""2010-09-30T13:43:59.1986333+08:00"" level=""ERROR"" thread=""4104"" domain=""Intel.AstraFw.ScHostProcess.exe"" username=""GAR\ukm01lma00sc01""><message>
    另一种是:
    <event logger=""root"" timestamp=""2010-09-21T10:07:17.4442811+08:00"" level=""ERROR"" thread=""ScHost Hosting Thread"" domain=""Intel.AstraFw.ScHostProcess.exe"" username=""CKM05LMA00SC02\Administrator""><message>
    ";
                MatchCollection mc = Regex.Matches(html, @"username=""([a-zA-Z]+\\)?([^""]+)");
                foreach (Match m in mc)
                {
                    Console.WriteLine(m.Groups[2].Value);
                }
            }输出:
    ukm01lma00sc01
    CKM05LMA00SC02\Administrator
      

  3.   

    楼上构思很巧。当斜杠前的字符有数字的时候,([^"]+)匹配“”之间的全部字符(对应CKM05LMA00SC02\Administrator),当斜杠前的字符全部是a-z的字符时,([^"]+)匹配斜杠之后的字符串(对应ukm01lma00sc01),很巧哦!
    想改进一点点,把[z-aA-Z]里边的A-Z去掉,让正则机直接支持不区分大小写,这样写起来简洁一些。如果有Username这样的情况,也可以适应。
      

  4.   

    提取的结果是
    username="CKM05LMA00SC02\Administrator
    username="GAR\ukm05lma00sc02
    怎么把前边的username="GAR\ukm05lma00sc02去掉呢??
      

  5.   

    写错了,应该是
    怎么把前边的username="去掉
      

  6.   


    ok,已经改好了,原来还需要用到m.Groups[2];
    哥们果然BH
      

  7.   

    正则:(?is)<event\s*[^<>]*username=(['"])(?<username>[0-9a-zA-Z\\]*)\1\s?><message>
      

  8.   

            public static void Test()
            {
                string html = @"<event logger=""root"" timestamp=""2010-09-30T13:43:59.1986333+08:00"" level=""ERROR"" thread=""4104"" domain=""Intel.AstraFw.ScHostProcess.exe"" username=""GAR\ukm01lma00sc01""><message>
    另一种是:
    <event logger=""root"" timestamp=""2010-09-21T10:07:17.4442811+08:00"" level=""ERROR"" thread=""ScHost Hosting Thread"" domain=""Intel.AstraFw.ScHostProcess.exe"" username=""CKM05LMA00SC02\Administrator""><message>
    ";
                MatchCollection mc = Regex.Matches(html, @"(?is)<event\s*[^<>]*username=(['"])(?<username>[0-9a-zA-Z\\]*)\1\s?><message>");
                foreach (Match m in mc)
                {
                    Console.WriteLine(m.Groups[“username”].Value);
                }
            }