【发布时间】:2021-03-05 18:42:00
【问题描述】:
使用 PostgreSQL,我无法设计正确的正则表达式模式来实现使用 regexp_replace 的 SQL 语句的所需输出。
我的源文本由几个分散的文本块组成,格式为“PU*”,后跟一个格式为“YYYY-MM”的日期字符串,例如“PU*2020-11”。这些块被不可预知的任意文本字符串(包括“PU*”的其他实例,后跟上述日期字符串格式,例如“PU*2017-07”)、空格和换行符包围。
我希望用“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*)*', '\2') 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
任何帮助表示赞赏。谢谢--
【问题讨论】:
标签: postgresql multiline regexp-replace capturing-group