需要RegEx模式匹配' - '

时间:2016-10-06 00:49:37

标签: c# regex

这是一些输入

 36    1   36   0ef6c0   id     N8   Online      FC  F-Port  50:05:07:68:01:80:fc:ae 
 37    1   37   0ef680   id     N8   Online      FC  F-Port  50:05:07:68:01:80:fa:1b 
 38    1   38   0ef640   id     N8   Online      FC  F-Port  50:05:07:68:01:80:fa:2e 
  39    1   39   0ef600   id     N8   Online      FC  F-Port  50:05:07:68:01:80:f9:ca 
86    2   22   0eea40   --    --   Online      VE  VE-Port  10:00:00:05:33:ea:da:4d "replsa2v" (downstream)
87    2   23   0eea00   --    --   Offline     VE  Disabled (Persistent) 
88    2   24   0ee9c0   --    --   Offline     VE  Disabled (Persistent) 

此正则表达式与前4行匹配。

(?<index>\d+)\s+(?<slot>\d+)\s+(?<port>\d+)\s+(?<address>\w{6,})\s+\b(id|cu)\b\s+(?<speed>\w\d+)\s+\b(?<state>\w+)\s+(?<protocol>\S+)\s+(?<type>\S+)\s(?<extra>.*)

这个匹配最后3个

(?<index>\d+)\s+(?<slot>\d+)\s+(?<port>\d+)\s+(?<address>\w{6,})\s+[-]{2}\s+[-]{2}\s+\b(?<state>\w+)\s+(?<protocol>\S+)\s+(?<type>\S+)\s(?<extra>.*)

我想要一个匹配所有的模式。代码可以工作,但如果我做一场比赛,它会更清晰,速度更快。我能用单一模式做的最好的事情就是匹配前4行输入的前半部分和最后3行的后半部分 - 基本上是第一个' - '之前和最后一个之后的所有内容。

1 个答案:

答案 0 :(得分:0)

这项工作对我来说:

(?<index>\d+)\s+
(?<slot>\d+)\s+
(?<port>\d+)\s+
(?<address>\w{6,})\s+
(id|cu|-{2})\s+
(?<speed>\w\d+|-{2})\s+
\b(?<state>\w+)\s+
(?<protocol>\S+)\s+
(?<type>\S+)\s
(?<extra>.*)