Удалить все во втором столбце, кроме скобок.

Удалить все во втором столбце, кроме скобок.

У меня есть файл, который выглядит так:

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

Файл разделен табуляцией; между первым столбцом (идентификатор гена) и вторым столбцом (имя белка) есть табуляция. (Имя белка может содержать пробелы, но не табуляции.) Имя белка содержит строку в скобках, например, (PTHR33076:SF11); это белокИДЕНТИФИКАТОР. Я хочу сохранить первый столбец и удалить все во втором столбце, кроме идентификатора белка (и его скобок). Таким образом, вывод будет выглядеть так:

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

Как это сделать? Я отметил все идентификаторы в скобках с помощью функции "mark" и ввода, (\w+\d+:\w+\d+)чтобы выделить все идентификаторы в скобках, но я не могу этим управлять. В качестве примечания, некоторые из названий белков имеют другие строки в скобках (например, см. первую строку, где имя белка содержит, (Z)а также значение идентификатора, которое мне нужно). Я не хочу их сохранять.

решение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

Если (в скобках) идентификатор белка всегда является последним в строке (как вы показали), то его будет достаточно для поиска \t.*( (или, возможно \t[^\r\n]*(, ) и замены на \t(.

Связанный контент