簡體   English   中英

Perl:刪除不以模式開頭的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM