首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres regexp_replace:无法用第一个捕获的组替换源文本

Postgres regexp_replace:无法用第一个捕获的组替换源文本
EN

Stack Overflow用户
提问于 2020-11-23 10:26:07
回答 1查看 72关注 0票数 0

使用PostgreSQL时,我无法设计正确的正则表达式模式来实现使用regexp_replace的SQL语句所需的输出。

我的源文本由几个分散的文本块组成,其形式为'PU*‘,后跟一个形式为’YYYY-MM‘的日期字符串--例如,'PU*2020-11’。这些块由不可预测的任意文本字符串(包括后面跟上述日期字符串格式的'PU*‘的其他实例,如'PU*2017-07)、空格和换行符包围。

我的愿望是用“YYYY-MM”文本模式的第一个实例替换整个源文本。在上面的例子中,期望的输出将是'2020-11‘。

目前,我的搜索模式会生成正确的替换文本,而不是第一个捕获组,但不幸的是,第一个捕获组之后的所有文本也会无意中出现在输出中,这不是所需的输出。

具体地说:

版本: postgres (PostgreSQL) 13.0

源文本的一个更复杂的示例:

代码语言:javascript
复制
First line
Exec committee
PU*2020-08
PU*2019-09--cancelled
PU*2017-10

added by Terranze

到目前为止我的模式是:

代码语言:javascript
复制
(\s|\S)*?PU\*(\d{4}-\d{2})(\s|\S*)*

当前SQL语句:

代码语言:javascript
复制
select regexp_replace('First line\nExec committee; PU*2020-08\nPU*2019-09\nPU*2017-10\n\nadded by Terranze\n', '(\s|\S)*?PU\*(\d{4}-\d{2})(\s|\S*)*', '\2') as _regex;

https://regex101.com/上的当前输出

代码语言:javascript
复制
2020-08

psql上的电流输出

代码语言:javascript
复制
                              _regex                               
───────────────────────────────────────────────────────────────────
 2020-08\nPU*2019-09--cancelled\nPU*2017-10\n\nadded by Terranze\n
(1 row)

所需输出:

代码语言:javascript
复制
2020-08

感谢您的帮助。谢谢--

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-23 10:44:06

下面这个表达式怎么样:

'^.*?PU\*(\d{4}-\d{2}).*$'

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64961826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档