2

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

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) а также значение ID, которое я хочу). Я не хочу оставлять их.

2 ответа2

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 возвращает первую и вторую группы захвата. Это эффективно удаляет окружающий текст во втором поле, потому что эта часть совпадения не включена в группу захвата.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .