使用正则表达式提取两个字符之间的文本

时间:2015-07-28 20:31:28

标签: sql regex postgresql

我正在使用PostgreSQL,我有以下格式的名单列表:

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

我想提取标题(即“先生”,“太太”)。它总是在逗号和点之间。

我只是正则表达式的新手,这是我正在尝试使用但我没有得到正确的答案。

SELECT SUBSTRING(name from ',..')

我得到“,M”作为答案。

我认为这是一个非常简单的修复方法。

由于

3 个答案:

答案 0 :(得分:1)

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

将摘录, Mr., Mrs.。请注意整个表达式的括号。 substring( ... from ..)将返回正则表达式中第一个组的匹配项。由于我使用(Mr)(s)来匹配标题,因此我必须将所有内容放在括号之间,以使substring()返回整个模式

删除可以使用', '

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

答案 1 :(得分:0)

尝试

SELECT SUBSTRING(name from ',\s([^\.]+)\.')

答案 2 :(得分:0)

您可以使用positionsubstring功能执行此操作:

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

SQL Fiddle Demo