[英]Perl: Delete a string that does NOT start with a pattern
我有這個輸入:
NP_001239382 1002 A G
NP_001074602 1005 A V
NP_001230039 100 A V
NP_932785 100 A V
NP_001164038 1018 A S
並希望使用某種正則表達式將其轉換為:
NP_001239382
NP_001074602
NP_001230039
NP_932785
NP_001164038
本質上,約束是“如果字符串不是以'NP'開頭,則刪除該字符串”,但我不確定如何執行此操作。
我將其發布為評論,但是由於所有這些都在尋找,我將其發布為答案。
在這種情況下,我們不必匹配和刪除不以NP開頭的單詞。 由於我們想要的所有字符串都是該行的第一個單詞,因此我們只需要刪除此后的所有內容即可。 我們可以使用以下這種方法:
perl -ple 's/[ \t].*//' input.txt > output.txt
它會刪除每行的第一個空格或制表符之后的內容,包括第一個空格或制表符,從而為我們提供所需的字符串。
相當簡單:
s/(?:\s++|(?<!\S))(?!NP)\S++//;
如果您要對這個問題多說一點,那會有所幫助; 這些行在文件中嗎? 數組? 一串在一起嗎?
這樣就消除了不以NP開頭的非空白字符,以及任何前面的空白(請確保該字符不在NP字符串的中間,如果沒有的話)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.