regex - 基于多种模式从 Postgres 表中获取字符串
问题描述
我在 Postgres 数据库的表中有以下列。
col1
P02724-PRO_0000012134
P02725
P02724-1
我想应用正则表达式来创建具有以下值的列
col2
P02724
P02725
P02724-1
我已经编写了以下查询,但查询无法获取“P02725”
regexp_match (col1, '.*-\d+|(.*)-') as col2
我应该在查询中进行哪些更改以获取此值?
谢谢
解决方案
您可以将 - 和数字部分设为可选,而不是使用交替
^\w+(?:-\d+)?
解释
^
字符串的开始\w+
匹配 1+ 个单词字符(?:
非捕获组- -\d+
Match
-` 和 1+ 位数字
- -\d+
)?
关闭组并使其可选
或者使用否定字符类而不是匹配单词字符
^[^-\r\n]+(?:-\d+)?
推荐阅读
- javascript - 如何重新渲染反应组件取决于文件?
- java - 如何将预定义的数组分配为零长度
- flutter - 使用 ARB 进行 Flutter 本地化 - 在 null 上调用 getter
- session - 修改 Fib 脚本以遇到会话
- c++ - 对自定义类的向量进行排序不会正确迭代向量
- google-calendar-api - Google Calendar API 未返回所有重复事件实例
- vb.net - 暗淡 n 个变量,其中 n 是用户定义的数字
- javascript - 转换 HTML Java 脚本以使用 ASP.Net C#
- matlab - MATLAB Coder 可以生成一个将指针作为输入的函数吗?
- python - pysimplegui 表格多行文本处理