我试图在hive上使用regexp_extract。
我的数据本质上是不同的,例如:
a2=new something
a1=asdasdsad;a2=old something;a3=asadasdsadsa
a2=Some place;alksndklsand;a1=asdklsad
现在,我只需要提取a2数据。 半冒号表示a2数据的结尾,但在每种情况下都可能不存在。
我一直在尝试的是结束一个&#39 ;;'到列然后运行regexp_extract来提取" a2 ="之间的数据。和第一个&#34 ;;" (添加&#34 ;;"以使逻辑与所有情况兼容):
regexp_extract(concat(other_data,';'),'(.*)a2=?(.*?);.*',2)
但这根本不起作用。
有人可以建议一个更好的正则表达式吗?
感谢。
答案 0 :(得分:1)
答案 1 :(得分:1)
这个简单的正则表达式将完成这项工作:
.*a2=?(.*?);
这是你的正则表达式,但只有一个捕获组(你不需要捕获它在a2键之前的内容)。
答案 2 :(得分:0)
package main
import (
"fmt"
"sort"
)
func main() {
s := []byte{'1', 'B', 'C', 'a', 'g', 'M', '9'}
sort.Slice(s, func(i int, j int) bool { return s[i] < s[j] })
fmt.Println(string(s))
}
我认为RegEx101对您理解逻辑很有帮助。我尝试了上面的表达式,似乎可以提取带有或不带有(?<=a2=)=?([^;\n]*)
的{{1}}的内容。