You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何用regex_replace提取文件名与日期?

PostgreSQL 提取文件名与日期的正则方案

假设你的表名为files,存储目标文本的列名为file_info,以下是针对需求的具体实现:

提取文件名(12345678.PDF)

方法1:用regexp_replace替换无关内容

SELECT regexp_replace(file_info, '.*\\\\([^\\[]+)\\s*\\[.*', '\\1') AS filename
FROM files;

正则逻辑说明:

  • .*\\\\:贪婪匹配到最右侧的反斜杠(定位到文件名的前置分隔符)
  • ([^\\[]+):捕获文件名,匹配所有非[的字符(文件名后紧跟 [SHA1]结构)
  • \\s*\\[.*:匹配文件名后的空格、[及后续所有内容
  • 最终用捕获组\\1替换整个字符串,仅保留文件名

方法2:用substring直接捕获目标

SELECT substring(file_info FROM '\\\\[^\\\\]+\\\\([^\\[]+)\\s*\\[') AS filename
FROM files;

通过正则直接定位并提取捕获组内容,结果与方法1一致。

提取日期(20221122)

方法1:基于文件名位置捕获日期

SELECT regexp_replace(file_info, '.*\\\\(\\d{8})\\\\[^\\[]+\\s*\\[.*', '\\1') AS file_date
FROM files;

正则逻辑说明:

  • .*\\\\:匹配到倒数第二个反斜杠前的所有内容
  • (\\d{8}):捕获8位数字格式的日期
  • \\\\[^\\[]+\\s*\\[.*:匹配日期后的反斜杠、文件名及后续内容
  • 替换后保留捕获的8位日期

方法2:用regexp_match提取数组中的捕获组

SELECT (regexp_match(file_info, '\\\\(\\d{8})\\\\'))[1] AS file_date
FROM files;

regexp_match返回匹配结果数组,取第一个元素即为日期(适用于文本中仅存在一处"反斜杠+8位数字+反斜杠"的场景)。


内容的提问来源于stack exchange,提问作者Alsheik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:45:42