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

如何用正则表达式提取竖线分隔文件中第5-6个分隔符间的内容?

如何用正则表达式提取竖线分隔文本中第5-6个竖线间的内容?

我有一个竖线(|)分隔的文件,内容示例如下:

col1|col2|col3||col5|col6||||col10

部分列可能为空(如上所示),需要提取第5个和第6个竖线之间的字符串,示例中结果为col6。请问如何通过正则表达式实现?计划将文件导入Oracle数据库后使用REGEXP_SUBSTR函数,也可通过Notepad++等工具处理,只需正则表达式模式。


Oracle 中使用 REGEXP_SUBSTR

Oracle的REGEXP_SUBSTR支持捕获组提取,针对竖线分隔场景可以直接定位目标内容:

-- 针对示例字符串的测试
SELECT REGEXP_SUBSTR('col1|col2|col3||col5|col6||||col10', '(.*?\|){5}(.*?)(?=\|)', 1, 1, NULL, 2) AS result FROM dual;

模式说明:

  • (.*?\|){5}:非贪婪匹配前5个竖线及其前面的所有内容,确保精准定位到第5个竖线的位置
  • (.*?):捕获第5个竖线后到下一个竖线前的内容(即目标字符串)
  • (?=\|):正向预查,确保后面紧跟竖线,避免误匹配后续内容
  • 最后一个参数2指定提取第二个捕获组的内容,也就是我们需要的目标值

如果处理表中字段,替换字符串为字段名即可:

SELECT REGEXP_SUBSTR(your_column, '(.*?\|){5}(.*?)(?=\|)', 1, 1, NULL, 2) AS target_column FROM your_table;

Notepad++ 中提取内容

直接查找定位

使用以下正则模式查找,匹配到的括号内部分即为目标内容:

^(?:.*?\|){5}(.*?)\|

操作步骤:

  1. 打开文件后按Ctrl+F唤起查找窗口
  2. 切换到「正则表达式」模式,按需勾选「匹配换行符」(处理多行内容)
  3. 输入上述模式,点击「查找全部」即可定位所有目标内容

批量替换提取

如果需要直接保留目标内容,可使用替换功能:

  • 查找框:^(.*?\|){5}(.*?)(\|.*)$
  • 替换框:\2
  • 点击「全部替换」后,文件将只保留第5-6个竖线间的内容

模式说明:

  • ^(?:.*?\|){5}:非捕获组,匹配开头到第5个竖线的所有内容
  • (.*?):捕获目标内容
  • \|.*$:匹配目标内容后的竖线及剩余所有内容
  • 替换时用\2引用第二个捕获组,仅保留目标内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:45:44