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;
上的当前输出
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}).*$'
使用 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;
上的当前输出
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}).*$'