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

如何使用REGEXP_SUBSTR捕获第三个间隔后的单词?

如何用正则表达式捕获第三个间隔后的单词

问题分析

给定的文本数据以连续空白符作为间隔,需要提取第三个间隔之后的第一个完整单词。原SQL的正则表达式存在语法错误,且匹配逻辑不符合需求,无法得到期望结果。

数据示例

Y091234ABC     100        DEF100.25      DEF200 DEF300      DEF10000

Y091234ABC       5000.75      DEF25000 DEF200000          DEF3000    DEF10000000 DEF100000

期望结果

DEF200
DEF200000

正确的SQL实现

核心思路

使用REGEXP_SUBSTR函数,通过正则匹配前三个由空白符分隔的字段后,提取下一个非空白符序列。核心逻辑是定位前三个字段的完整范围,再捕获后续的目标单词。

具体SQL语句

Oracle 版本

SELECT REGEXP_SUBSTR(DATA, '^(\S+\s+){3}(\S+)', 1, 1, NULL, 2) AS target_word
FROM TBL;

MySQL 版本

SELECT REGEXP_SUBSTR(DATA, '^\\S+\\s+\\S+\\s+\\S+\\s+(\\S+)', 1, 1, '', 1) AS target_word
FROM TBL;

正则说明

  • \S+:匹配一个或多个非空白字符,对应单个字段内容
  • (\S+\s+){3}:重复3次,匹配前三个字段及后续的空白间隔
  • (\S+):捕获第四个字段,也就是第三个间隔后的目标单词
  • 末尾的数字参数指定返回对应捕获组的内容(Oracle用2,MySQL用1)

原SQL的问题

原正则\s{3}[A-Z{3}\d+\.\d+存在两处关键错误:

  1. 语法错误:[A-Z{3}中左括号未闭合,字符集定义逻辑混乱,正确的字符范围应该是[A-Z0-9.]
  2. 逻辑错误:仅匹配三个空白符后的片段,没有考虑前三个字段的完整结构,无法准确定位到目标位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:33:19