2016-08-12 920 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