删除第二列中除括号外的所有内容

删除第二列中除括号外的所有内容

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

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(

相关内容