如何使用正则表达式匹配所有不以字符结尾的空格?

时间:2012-07-27 07:18:32

标签: regex

我有一个引擎,它接受行正则表达式(提取单行)和公共列正则表达式(从每行中提取列)

但是我遇到了公共列正则表达式的问题,它可以将下面的示例文本提取到具有公共索引的列中(由引擎完成)

示例文字:您可以test it here

/misc/qk12              (innfs1:/vol/fs06/qk12  ) : 314572800 total allocated Kb
                                                  62636476 free allocated Kb
                                                  251936324 used allocated Kb
                                                        81 % allocation used
/home/psum           (innfs2_42:/vol/goshihome/goshihome/home/psum) : 2349649104 total allocated Kb
                                                  405498596 free allocated Kb
                                                  1944150508 used allocated Kb
                                                        83 % allocation used
/home/aman           (innfs2_42:/vol/goshihome/goshihome/home/aman) : 2349649104 total allocated Kb
                                                  405498596 free allocated Kb
                                                  1944150508 used allocated Kb
                                                        83 % allocation used
/u01                   (/dev/vg00/u01vol      ) :  9559429 total allocated Kb
                                                   4077136 free allocated Kb
                                                   5482293 used allocated Kb
                                                        58 % allocation used

目前正在test

您可以看到前两行与\s+一起运行良好,它将每一行划分为相关信息的0,1,3,7,11,15索引,但在接下来的两行中失败,因为{中有一个额外的空格{1}}。

所以我想知道是否有人可以帮助我使用正则表达式,该正则表达式将匹配所有不以直接字符(innfs1:/vol/fs06/qk12 )结尾的空格。

2 个答案:

答案 0 :(得分:1)

您可能希望在正则表达式结束时尝试一个积极的前瞻。积极的前瞻部分是非捕捉,但它将有助于缩小你的比赛:

\s+(?!\s*\))

(?! )构造是,由圆括号定义,?!部分创建非捕获前瞻,意味着该组用作组件匹配的内容,但该组匹配的内容不包含在匹配的输出中。

\s*创建“零个或多个空格”,\)期望在空格后面有一个括号。

引用非常好的页面,其中有关于前瞻/后瞻(环视)的解释正则表达式:http://www.regular-expressions.info/lookaround.html

答案 1 :(得分:0)

我的第一个想法是否定支架。 (\ S *?!\))