刪除第二列中不在括號中的所有內容

刪除第二列中不在括號中的所有內容

我有一個如下所示的文件:

gene ID              protein
Solyc06g062540    (Z) PYROPHOSPHATASE 3 (PTHR20889:SF0)
Solyc10g075050    ALBUMIN SUPERFAMILY (PTHR33076:SF11)
Solyc07g061760    SUBFAMILY (PTHR24177:SF35)

文件以製表符分隔;第一列(基因 ID)和第二列(蛋白質名稱)之間有一個選項卡。 (蛋白質名稱可以包含空格,但不能包含製表符。)蛋白質名稱包含括號中的字串,例如(PTHR33076:SF11);這是蛋白質ID。我想保留第一列並刪除第二列中除蛋白質 ID(及其括號)之外的所有內容。所以輸出看起來像:

Solyc06g062540    (PTHR20889:SF0)
Solyc10g075050    (PTHR33076:SF11)
Solyc07g061760    (PTHR24177:SF35)

我怎樣才能做到這一點?我已經使用“標記”功能標記了括號中的所有 ID,並輸入(\w+\d+:\w+\d+)以突出顯示括號中的所有 ID,但我無法操作它。請注意,某些蛋白質名稱確實有其他帶有括號的字串(例如,請參閱第一行,其中蛋白質名稱包含(Z)以及我想要的 ID 值)。我不想保留那些。

答案1

您可以透過正規表示式搜尋和取代來完成此操作。按Ctrl+H開啟「取代」對話框。確保搜尋模式為Regular Expression

找什麼:

(^[^\t\r\n]+\t)[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*

用。

\1\2

模式說明:

[^\t\r\n]+是不包含製表符、換行符或回車符的任何字串。這應該僅與文件的一列中的文字相符。

^[^\t\r\n]+匹配第一列的內容,因為前導^將匹配限制為行的開頭。

第一個捕獲組(^[^\t\r\n]+\t)與第一個欄位和後續選項卡的內容相符。

[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*符合第二個欄位的內容,並且僅當括號表達式存在時才符合。

第二個捕獲組(\(\w+\d+:\w+\d+\))與括號表達式相符。

替換模式\1\2傳回第一和第二捕獲組。這會有效地刪除第二個字段中的周圍文本,因為匹配的該部分不包含在捕獲組中。

答案2

如果(帶括號的)蛋白質 ID 始終是該行的最後一個(如您所示),則應該足以搜尋\t.*( (或可能\t[^\r\n]*()並將其替換為\t(

相關內容