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

Postgres regexp_replace: inability to replace source text with first captured group

使用 PostgreSQL,我无法设计正确的正则表达式模式来实现使用 regexp_replace.

的 SQL 语句的预期输出

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

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

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

具体来说:

版本:postgres (PostgreSQL) 13.0

更复杂的源文本示例:

First line
Exec committee
PU*2020-08
PU*2019-09--cancelled
PU*2017-10

added by Terranze

我目前的模式:

(\s|\S)*?PU\*(\d{4}-\d{2})(\s|\S*)*

当前 SQL 语句:

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*)*', '') as _regex;

https://regex101.com/

上的当前输出
2020-08

psql 上的当前输出

                              _regex                               
───────────────────────────────────────────────────────────────────
 2020-08\nPU*2019-09--cancelled\nPU*2017-10\n\nadded by Terranze\n
(1 row)

期望的输出:

2020-08

感谢任何帮助。谢谢--

这个表达式怎么样:

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