Выборка строк перед специальными символами из столбца postgres - PullRequest
1 голос
/ 02 марта 2020

У меня есть столбец со следующими значениями в таблице postgres.

col1
uniprotkb:P62158(protein(MI:0326), 9606 - Homo sapiens)
uniprotkb:O00602-PRO_0000009136(protein(MI:0326), 9606 - Homo sapiens)

Я хотел бы извлечь значение из приведенных выше значений столбца.

col2
P62158
O00602

Я использую следующее регулярное выражение соответствует моему столбцу

select 

        uniprotkb:(.*)\-|\([a-zA-Z].* as col2

from table;

Но приведенное выше регулярное выражение захватывает текст перед последним '-'. Я хочу записать текст между uniprotkb: и перед первым появлением '(' или '-'. Любое предложение здесь будет полезно.

1 Ответ

1 голос
/ 02 марта 2020

Вы можете использовать

uniprotkb:(.*?)[-(][a-zA-Z]
           ^^^ ^^^^

См. Демоверсию regex .

Подробности

  • uniprotkb: - буквенная строка
  • (.*?) - Группа 1: любые 0+ символов, как можно меньше
  • [-(] - - или (
  • [a-zA-Z] - буква.

PostgresSQL тест:

SELECT (REGEXP_MATCHES (
      'uniprotkb:P62158(protein(MI:0326), 9606 - Homo sapiens)',
      'uniprotkb:(.*?)[-(][a-zA-Z]'
   ))[1]

Выходы:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...