Board logo

标题: [问题求助] 如何用一个正则表达式在特定位置排除字符串 [打印本页]

作者: weichenxiehou    时间: 2012-11-22 12:57     标题: 如何用一个正则表达式在特定位置排除字符串

本人遇到一个需求,如何用正则表达式在某个位置排除字符串而不是单个字符。
如:请用一个正则表达式匹配出1.txt中具有如下特征的行。
2009-10-2 16:23:52 bat-batman

其中第一列为日期,月份和日期可能为1位或2位,第二列为时间,第三列为名称,关键就在这里,不能为“bat-weichenxiehou”,其他都可以。
要求是只能用一个正则匹配该行,管道啊正则嵌套什么的不考虑,零宽断言好像可以,但是sed和gawk好像不支持,请问各位有什么解决办法吗?具体问题我已经解决,只是想将这个问题泛化,像sed和awk这种工具如何排除字符串?
作者: tmplinshi    时间: 2012-11-22 13:22

本帖最后由 tmplinshi 于 2012-11-22 13:31 编辑

onigsed - 支持 Oniguruma (ver. 2.5.0) 和 Perl 5 正则表达式的 sed (4.1.5)
http://bathome.net/thread-20202-1-1.html

onigsed -R "/[0-9]{4}(-[0-9]{1,2}){2} ([0-9]{2}:){2}[0-9]{2} (?!bat-weichenxiehou)/!d" a.txt
________________________________________________________________________________________

http://baiy.cn/utils/f/index.htm

f a.txt -r:"***:[0-9]{4}(-[0-9]{1,2}){2} ([0-9]{2}:){2}[0-9]{2} (?!bat-weichenxiehou)"

作者: Demon    时间: 2012-11-22 13:44

第一次听说零宽断言这个词,不得不佩服翻译人员水平之高,居然能想出那么晦涩的词来表达Lookahead和Lookbehind
作者: weichenxiehou    时间: 2012-11-22 13:54

回复 2# tmplinshi
多谢,晚上回去试试这两个工具。
作者: BAT-VBS    时间: 2012-11-22 14:50

回复 3# Demon


    这位大神能否给个不晦涩的词学习一下啊




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2