2015-07-28 4 views
0

я использую PostgreSQL и у меня есть список имен в следующем формате:Использование регулярных выражений для извлечения текста между двумя символами

"Abbing, Mr. Anthony" 
"Abbott, Mr. Rossmore Edward" 
"Abbott, Mrs. Stanton (Rosa Hunt)" 

И я хочу, чтобы извлечь название (т.е. «мистер», " Г-жа"). Это всегда между запятой и точкой.

Я новичок в регулярных выражениях, это то, что я пытаюсь использовать, но я не получаю правильный ответ.

SELECT SUBSTRING(name from ',..') 

Я получаю «, М» в качестве ответа.

Я предполагаю, что это очень просто исправить.

Благодаря

ответ

1
substring(name from '(, (Mr)(s){0,1}\.)') 

извлечет , Mr. или , Mrs.. Обратите внимание на круглые скобки вокруг всего выражения. substring(... from ..) вернет совпадение из первой группы в регулярном выражении. Как я использовал (Mr) и (s), чтобы соответствовать названиям, я должен поставить все между скобками, чтобы substring() возвращения всей картиной

избавиться от ведущего ', ' вы можете использовать trim()

trim(substring(name from '(, (Mr)(s){0,1}\.)'), ', ') 
0

Вы можете использовать position и substring функцию, чтобы сделать это:

SELECT samplename 
    ,trim(substring(samplename, position(',' IN samplename) + 1 
      , position('.' IN samplename) - position(',' IN samplename))) AS initials 
FROM test 

SQL Fiddle Demo