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

Spark中regexp_extract()报错:正则分组数为0但指定分组索引为1

报错原因

这个报错和正斜杠转义无关,核心问题出在Spark SQL regexp_extract 函数的实现逻辑上:
Spark的regexp_extract语法为regexp_extract(字符串, 正则表达式, 分组索引),第三个参数分组索引的默认值为1,要求正则表达式中必须存在对应编号的捕获组。你使用的正则(?<=/)[^/]*$只用到了零宽后向断言,没有定义任何显式捕获组,整个正则的分组总数为0,调用时取默认索引1就会触发分组索引不合法的报错。

本地R环境能正常运行,是因为本地dplyr或基础字符串处理函数的regexp_extract没有强制要求捕获分组,默认返回整个正则的匹配结果,和Spark SQL的函数规则不一致。

解决方法

把正则调整为带捕获组的版本即可,不需要修改其他逻辑:

library(sparklyr)
library(tidyverse)

sc <- spark_connect(method = "databricks")

tibble(my_string = c("aaa/bbb/ccc", "ddd/eee/fff", "ggg/hhh/iii")) %>%
  copy_to(sc, ., "test_regexp_extract", overwrite = TRUE) %>%
  mutate(my_result = regexp_extract(my_string, "(?<=/)([^/]*$)", 1)) %>%
  count(my_result)

如果要兼容字符串不含正斜杠的场景,也可以用更简洁的写法:

mutate(my_result = regexp_extract(my_string, "([^/]+)$", 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:10