首页 > 解决方案 > 基于多种模式从 Postgres 表中获取字符串

问题描述

我在 Postgres 数据库的表中有以下列。

col1
P02724-PRO_0000012134
P02725
P02724-1

我想应用正则表达式来创建具有以下值的列

col2
P02724
P02725
P02724-1

我已经编写了以下查询,但查询无法获取“P02725”

regexp_match (col1, '.*-\d+|(.*)-') as col2

我应该在查询中进行哪些更改以获取此值?

谢谢

标签: regexpostgresql

解决方案


您可以将 - 和数字部分设为可选,而不是使用交替

^\w+(?:-\d+)?

解释

  • ^字符串的开始
  • \w+匹配 1+ 个单词字符
  • (?:非捕获组
    • -\d+ Match-` 和 1+ 位数字
  • )?关闭组并使其可选

或者使用否定字符类而不是匹配单词字符

^[^-\r\n]+(?:-\d+)?

正则表达式演示| Postgresql 演示


推荐阅读