2016-08-12 924 views
0

我们每天收到一个包含数千行数据的文件。偶尔会有几条线路混乱,导致自动化过程失败。发生这种情况时,可能很难找到错误。正则表达式 - 查找所有不匹配模式的字符串

我想使用正则表达式来查找不符合文件常规结构的任何内容。所有的线都应该如下所示:

ABC|SomeText|MoreText 
DEF|SomeText|MoreText 
ABC|SomeText|MoreText 
GHI|SomeText|MoreText 
DEF|SomeText|MoreText 

让行标志不以3个字母和pipebar开始正则表达式。 在下面的例子中,它会标志线3

ABC|SomeText|MoreText 
DEF|Some 
Text|MoreText 
ABC|SomeText|MoreText 
GHI|SomeText|MoreText 
DEF|SomeText|MoreText 

任何帮助,将不胜感激,我一直在挣扎了一会儿。

非常感谢

+0

什么是工具/编程语言? –

+0

如果您正在使用Notepad ++,应将其作为问题标签添加。记事本++使用Boost正则表达式库,它不是PCRE,但接近于它。 –

回答

1

这将是非常有用的解释你正在使用的正则表达式的方言。例如,如果你用grep,您可以只使用-v选项反转的意义,然后就写一个正常的正则表达式,像这样:

grep -v -E '^[A-Z]{3}\|[^|]*\|' 

否则,如果您不能反转的意义,但你具有能够使用negative lookahead(如Perl),你可以做以下的系统:

grep -P '^(?![A-Z]{3}\|[^|]*\|)' 

(?!...)部分,使负先行。因此,这将匹配任何行的开头后面没有三个大写字母,一个酒吧,一些文字,然后是另一个酒吧。

+0

感谢Neil的快速反应。我不确定方言。目前,我正在使用记事本++的正则表达式来搜索文件。不知道这是否有帮助。我会试试这些! – Cyan02

+0

显然,notepad ++使用PCRE(与Perl兼容的正则表达式),所以它应该支持带有负向视图的第二个。祝你好运! –

+0

你完全正确,赢得了第二名。奇迹般有效!对不起,这是我的第一个问题......我在哪里切换为正确的答案? – Cyan02

1

例如,使用AWK:

awk '!/^[a-zA-Z]{3}\|/' input.txt 

将显示 '标记' 线。

awk '/^[a-zA-Z]{3}\|/' in.txt 

将显示正确的行。

+0

谢谢Wroniasty,我会试试这个! – Cyan02