我希望能够在c#中使用正则表达式匹配并提取以下字符串中的所有子字符串:
"2012-05-15 00:49:02 192.168.100.10 POST /Microsoft-Server-ActiveSync/default.eas User=nikced&DeviceId=ApplDNWGRKZQDTC0&DeviceType=iPhone&Cmd=Ping&Log=V121_Sst8_LdapC0_LdapL0_RpcC31_RpcL50_Hb3540_Erq1_Pk1728465481_S2_ 443 redcloud\nikced 94.234.170.42 Apple-iPhone4C1/902.179 200 0 64 3140491"因为它是一个日志文件,所以正则表达式应该能够处理任何类似类型的行。
在这种情况下,集合的首选输出应该是:
2012-05-15
00:49:02
192.168.100.10
/Microsoft-Server-ActiveSync/default.eas
User=nikced&DeviceId=ApplDNWGRKZQDTC0&DeviceType=iPhone&Cmd=Ping&Log=V121_Sst8_LdapC0_LdapL0_RpcC31_RpcL50_Hb3540_Erq1_Pk1728465481_S2_
443
redcloud\nikced
94.234.170.42
Apple-iPhone4C1/902.179
200
0
64
3140491使用C#、.net和正则表达式将上面的子字符串提取到一个集合中(MatchCollection优先)。所有日志行都遵循相同的格式和模式。
发布于 2012-05-18 22:38:43
非常复杂的正则表达式传入:
logFile.Split(' ');发布于 2012-05-18 22:40:36
这将提供一个数组,您可以遍历该数组以检索由空格分隔的所有“行”
string[] lines = log.Split(' ');发布于 2012-05-18 22:45:37
您不需要使用Regex。您可以简单地使用String.Split Method,并指定空格作为分隔符:
string [] substrings = line.Split(new Char [] {' '});如果需要识别每个部分的类型,那么应该指定需要查找的内容,然后可以为其创建正则表达式。
无论如何,如果您真的想使用Regex,请执行以下操作:
Regex re = new Regex (@"(?:(?<s>[^ ]+)(?: |$))*");当您调用Match方法时,这将为您提供"s“组中的所有捕获。
正如OP在注释中指出的那样,分隔符可以是来自单个空格的任何部分,然后可能的分隔符应该包括在表达式的(?: |$)和[^ ]部分中。即,如果空格和制表符是可能的分隔符,则将该部分替换为(?: |\t|$)和[^ \t]。如果需要接受多个字符作为分隔符,请在()组后添加+:
(?:(?<s>[^ \t]+)(?: |\t|$)+)*https://stackoverflow.com/questions/10654605
复制相似问题