如何使用regexp_substr或regexp_extract提取指定前缀后空格前的字符串
正则表达式构造方案
核心匹配规则
要捕获指定前缀后到下一个空格前的内容,通用正则写法为:(?<=<替换为你要匹配的前缀>)[^ ]+
规则说明:
(?<=<前缀>)是正向零宽断言,只会定位前缀结束后的位置,不会把前缀本身纳入匹配结果[^ ]+匹配所有非空格的连续字符,遇到空格或者行尾就自动停止匹配
不同函数用法示例
1. regexp_extract 用法(适配Hive/Spark SQL等场景)
以提取TX:对应的 value 为例,写法如下:regexp_extract(待解析字段名, '(?<=TX:)[^ ]+', 0)
说明:第三个参数填0表示直接返回整个正则匹配到的内容,不需要额外设置捕获组
2. regexp_substr 用法(适配Oracle/MySQL 8.0等场景)
以提取SP:对应的 value 为例,写法如下:regexp_substr(待解析字段名, '(?<=SP:)[^ ]+')
如果你的数据库不支持零宽断言,可以改用带捕获组的写法,正则调整为前缀([^ ]+),示例:regexp_extract(待解析字段名, 'TX:([^ ]+)', 1)
说明:第三个参数填1表示返回第一个捕获组的内容,也就是前缀后到空格前的目标值
验证效果
用示例数据TX:123 SP:XapZNsyeS INST:456123测试:
- 匹配
TX:前缀返回结果:123 - 匹配
SP:前缀返回结果:XapZNsyeS - 匹配
INST:前缀返回结果:456123
注意:如果你要匹配的前缀本身包含
.、*这类正则特殊字符,需要先对特殊字符加转义符\处理
内容的提问来源于stack exchange,提问作者eps
相关产品推荐
相关产品推荐

