Regex 必须通过剥离最后出现的符号字符来提取单词的开头,以正则表达式提取结束

Regex 必须通过剥离最后出现的符号字符来提取单词的开头,以正则表达式提取结束,regex,hive,hiveql,Regex,Hive,Hiveql,我想在配置单元中使用regex_replace或regexp_extract,在这里我只能获得特殊字符“^”的第一次n出现,但最后一次出现和最后一次出现后的文本除外。 F 例如: 101^11应提取101 101^1111^232应提取101^1111 144^899^890^1应提取1144^899^890 我只能处理正则表达式,而不能处理字符串函数或udf 试试看 regexp\u extract函数 在蜂巢中: hive> select regexp_extract('101^1

我想在配置单元中使用regex_replace或regexp_extract,在这里我只能获得特殊字符“^”的第一次n出现,但最后一次出现和最后一次出现后的文本除外。 F 例如:

  • 101^11
    应提取
    101
  • 101^1111^232
    应提取
    101^1111
  • 144^899^890^1
    应提取
    1144^899^890
我只能处理正则表达式,而不能处理字符串函数或udf

试试看 regexp\u extract函数

在蜂巢中:

hive> select regexp_extract('101^11',"(.*)\\^",1)
+------+--+
| _c0  |
+------+--+
| 101  |
+------+--+
scala> val hiveContext = new HiveContext(sc)
scala> val df= hiveContext.sql("""select regexp_extract('101^11','(.*)\\\^',1)""");
scala> df.show()
+---+
|_c0|
+---+
|101|
+---+
>>> hiveContext=HiveContext(sc)
>>> df=hiveContext.sql("select regexp_extract('101^11','(.*)\\\^',1)")
>>> df.show()
+---+
|_c0|
+---+
|101|
+---+
在Scala中:

hive> select regexp_extract('101^11',"(.*)\\^",1)
+------+--+
| _c0  |
+------+--+
| 101  |
+------+--+
scala> val hiveContext = new HiveContext(sc)
scala> val df= hiveContext.sql("""select regexp_extract('101^11','(.*)\\\^',1)""");
scala> df.show()
+---+
|_c0|
+---+
|101|
+---+
>>> hiveContext=HiveContext(sc)
>>> df=hiveContext.sql("select regexp_extract('101^11','(.*)\\\^',1)")
>>> df.show()
+---+
|_c0|
+---+
|101|
+---+
在Pyspark中:

hive> select regexp_extract('101^11',"(.*)\\^",1)
+------+--+
| _c0  |
+------+--+
| 101  |
+------+--+
scala> val hiveContext = new HiveContext(sc)
scala> val df= hiveContext.sql("""select regexp_extract('101^11','(.*)\\\^',1)""");
scala> df.show()
+---+
|_c0|
+---+
|101|
+---+
>>> hiveContext=HiveContext(sc)
>>> df=hiveContext.sql("select regexp_extract('101^11','(.*)\\\^',1)")
>>> df.show()
+---+
|_c0|
+---+
|101|
+---+

这不管用吗?我已经尝试过这个例子,它是成功的。感谢您的快速帮助。如果我尝试使用spark sql进行相同的查询,则不会为extract列返回数据。DataFrame df=hiveContext.sql(“选择regexp\u extract(eid,(.*)\\\^',1)作为eid1,从员工姓名中选择”);System.out.println(“schema”+df.schema());System.out.println(“第一条记录”+df.first());第一条记录[,rakes]请用三个引号val df=hiveContext.sql(““select REGEXPU extract('101^11','(.)\\^',1)”);*它应该会起作用。。!!我正在spark sql java中尝试,它在eclipse中用三个引号显示错误。