如何在Athena中使用正则函数提取括号前的字符串
在Athena中用正则函数提取左括号前的内容
针对你的需求,这里提供两种可行的正则函数实现方式:
方法一:使用regexp_extract
通过提取左括号前的匹配分组来获取目标内容,正则采用非贪婪匹配确保只取到第一个左括号之前的部分:
SELECT regexp_extract('iphone-ios-cx 12.45.0(2144)', '^(.*?)\\(', 1) AS result;
^匹配字符串起始位置(.*?)非贪婪匹配任意字符(直到遇到第一个左括号),并将这部分作为捕获分组\\(匹配字面量的左括号(SQL字符串中需用双反斜杠转义正则里的特殊字符)- 最后的
1表示提取第一个捕获分组的内容
方法二:使用regexp_replace
将左括号及其之后的所有内容替换为空字符串,直接得到目标结果:
SELECT regexp_replace('iphone-ios-cx 12.45.0(2144)', '\\(.*$', '') AS result;
\\(匹配字面量的左括号.*$匹配左括号之后的所有字符直到字符串结尾- 替换为空字符串后,剩余部分就是左括号前的内容
补充说明
你之前用regexp_replace结果不正确,大概率是没正确转义左括号(左括号在正则中是特殊字符,必须转义才能匹配字面量),或者使用了贪婪匹配导致范围错误。上述两种写法都能稳定处理示例中的字符串场景。
内容的提问来源于stack exchange,提问作者vvazza
相关产品推荐
相关产品推荐

