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

Presto SQL 使用REGEXP_EXTRACT提取特定字符串后内容出错如何解决

修正方案

问题根因

  • 未指定捕获组序号时,REGEXP_EXTRACT默认返回正则匹配到的完整字符串,所以会把前缀的问题描述也一起返回
  • 原有正则末尾的(?=)是无匹配规则的正向零宽断言,惰性匹配.*?遇到该断言会直接终止匹配,无法获取到后续的地点内容

修正写法

写法1(适用于Hive、Spark SQL、BigQuery等绝大多数支持正则的SQL引擎)

指定捕获组序号为1,仅返回需要的地点部分:

LTRIM(RTRIM(REGEXP_EXTRACT(description_text, 'What is your vendor location\\?:\\s*(.*?)(?=\\n|$)', 1))) AS vendor_location

说明:正则中的\\s*会自动匹配冒号后的所有空格,(?=\\n|$)表示匹配到换行符或者字符串末尾就停止,哪怕后续还有其他表单字段也不会错误截取。

写法2(零宽断言版本,无需指定捕获组)

如果所用SQL环境不支持REGEXP_EXTRACT的第三个捕获组参数,可以用正向后顾断言直接定位到前缀之后的内容:

LTRIM(RTRIM(REGEXP_EXTRACT(description_text, '(?<=What is your vendor location\\?:\\s).*?(?=\\n|$)'))) AS vendor_location

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:15:03