正则表达式匹配命令输出

时间:2015-05-14 17:52:24

标签: regex

Filename                     EOF    

xxxxxxx        101           241434 12DEC2011  9:33 255,255 UUUU     14     42
xxxxxxx        101           114682 12DEC2013 11:49 220,0   UUUU     14     42
xxxxxxxx       101           200542 14DEC2011 14:43 255,255 UUUU     14     42
xxxxxxxx       101           200458 25JAN2012 15:28 220,0   NUUU     14     42
xxxxxxxx       101             8102 28JAN2015 15:17 227,12  NCCC     14     14
xxxxxx         101           114502 12DEC2013 11:49 220,0   UUUU     14     42
xxxxxxx        101             4622 23JAN2012 14:46 255,255 UUUU     14     42
xxxxxxxx       101              120 18APR2013 16:20 201,130 OOOO     14     28
xxxxxx         101            48298 03JAN2013  8:47  90,2   OOOO     14     14
xxxxx          101           200686 07DEC2011 15:59 255,255 UUUU     14     42
xxxxxxxx       101             3578 30JAN2014 18:14 255,255 UUUU     14     42

从输出中我只想匹配Filename和EOF文件名。我对\s\d+\s\d感到厌倦,并且只能匹配EOF,但却找不到与EOF匹配文件名的小问题

1 个答案:

答案 0 :(得分:0)

您可以使用:

^([\w\.]+)\s+\d+\s+(\d+)

第1组将包含FileName,第2组将包含EOF

See Demo

说明:

^它是一个锚点,它告诉引擎这是该行的开始。

\w匹配任何单词字符(字母数字和下划线)

\s匹配任何空格字符(空格,制表符,换行符)

\d匹配任何数字字符[0-9]

+匹配前面一个或多个令牌

\.与点匹配。字符

[...]是一个字符集,匹配集合

中的任何字符

(...)它是一个捕获组,它将内部的内容分组以提取子字符串

因此,考虑到这一点,您可以看到模式正在做什么:

你应该告诉引擎它是行^的开头,然后你想捕获第一组字母数字字符([\w\.]+),我假设文件名可能包含一个点。如果它可能包含其他字符,则应将此部分更改为([\w\.-]+)或您可能需要匹配的任何字符。

然后我们告诉该字符串至少有一个空格,但可能有更多\s+。然后你告诉它至少有一个数字,但可能有更多\d+(因为你对此不感兴趣,你不把它放在捕获组中)然后更多whitespacing \s+然后更多的数字,但是这些你有兴趣捕捉,所以你把它放在括号(\d+)

希望这有助于您更多地了解Regex,干杯!