我有一个引擎,它接受行正则表达式(提取单行)和公共列正则表达式(从每行中提取列)
但是我遇到了公共列正则表达式的问题,它可以将下面的示例文本提取到具有公共索引的列中(由引擎完成)
示例文字:您可以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 )
结尾的空格。
答案 0 :(得分:1)
您可能希望在正则表达式结束时尝试一个积极的前瞻。积极的前瞻部分是非捕捉,但它将有助于缩小你的比赛:
\s+(?!\s*\))
(?! )
构造是组,由圆括号定义,?!
部分创建非捕获前瞻,意味着该组用作组件匹配的内容,但该组匹配的内容不包含在匹配的输出中。
\s*
创建“零个或多个空格”,\)
期望在空格后面有一个括号。
引用非常好的页面,其中有关于前瞻/后瞻(环视)的解释正则表达式:http://www.regular-expressions.info/lookaround.html
答案 1 :(得分:0)
我的第一个想法是否定支架。 (\ S *?!\))