使用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-08psql上的电流输出
_regex
───────────────────────────────────────────────────────────────────
2020-08\nPU*2019-09--cancelled\nPU*2017-10\n\nadded by Terranze\n
(1 row)所需输出:
2020-08感谢您的帮助。谢谢--
发布于 2020-11-23 10:44:06
下面这个表达式怎么样:
'^.*?PU\*(\d{4}-\d{2}).*$'
https://stackoverflow.com/questions/64961826
复制相似问题