我的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类句段。
拜求达人!
一种是:
<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类句段。
拜求达人!
取分组2
{
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
想改进一点点,把[z-aA-Z]里边的A-Z去掉,让正则机直接支持不区分大小写,这样写起来简洁一些。如果有Username这样的情况,也可以适应。
username="CKM05LMA00SC02\Administrator
username="GAR\ukm05lma00sc02
怎么把前边的username="GAR\ukm05lma00sc02去掉呢??
怎么把前边的username="去掉
ok,已经改好了,原来还需要用到m.Groups[2];
哥们果然BH
{
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);
}
}