Postgres regexp_replace:如何移除指定格式的整行内容?
PostgreSQL regexp_replace 移除特定格式整行内容
需要移除所有符合「[任意字母数字别名].dataMain AS [对应别名]__dataMain,」格式的整行内容,别名由字母数字组成(如m、n、m2等)。
示例输入
n.dataPrev AS n__dataPrev, n.dataMain AS n__dataMain, m.dataPrev2 AS m__dataPrev, m.dataMain AS m__dataMain, m.dataNext2 AS m_dataNext2
期望输出
n.dataPrev AS n__dataPrev, m.dataPrev2 AS m__dataPrev, m.dataNext2 AS m_dataNext2
错误尝试及输出
用户原语句:
select regexp_replace( 'n.dataPrev AS n__dataPrev, n.dataMain AS n__dataMain, m.dataPrev2 AS m__dataPrev, m.dataMain AS m__dataMain, m.dataNext2 AS m_dataNext2', '[^:\s]+dataMain(\S+)', '');
错误输出:
n.dataPrev AS n__dataPrev, n.dataMain AS m.dataPrev2 AS m__dataPrev, m.dataMain AS m__dataMain, m.dataNext2 AS m_dataNext2
正确解决方案
正确的正则需要精准匹配整行目标内容,同时启用换行敏感和全局替换标志:
SELECT regexp_replace( 'n.dataPrev AS n__dataPrev, n.dataMain AS n__dataMain, m.dataPrev2 AS m__dataPrev, m.dataMain AS m__dataMain, m.dataNext2 AS m_dataNext2', '^\w+\.dataMain AS \w+__dataMain,\s*$', '', 'gn' );
正则表达式说明
^:匹配每行的开头位置\w+:匹配1个及以上字母数字(对应别名部分)\.dataMain AS:匹配固定的.dataMain AS文本\w+__dataMain,:匹配对应别名加__dataMain,的后缀格式\s*$:匹配行尾的任意空白字符(包含换行符)- 标志
g:执行全局替换,处理所有匹配项 - 标志
n:让^和$匹配每行的首尾(默认匹配整个字符串的首尾)
内容的提问来源于stack exchange,提问作者LuFFy
相关产品推荐
相关产品推荐

