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

时间:2018-06-10 12:10:18

标签: regex hive hiveql

我想在hive中使用regex_replace或regexp_extract,我只能获得第一个 n 出现的特殊字符“^”,除了最后一次出现和最后一个文本发生。 F 例如:

  • 101^11应提取101
  • 101^1111^232应提取101^1111
  • 144^899^890^1应提取1144^899^890

我只使用正则表达式而不是字符串函数或udf。

1 个答案:

答案 0 :(得分:2)

试试 regexp_extract 功能

在蜂巢中:

hive> select regexp_extract('101^11',"(.*)\\^",1)
+------+--+
| _c0  |
+------+--+
| 101  |
+------+--+

在Scala中:

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

在Pyspark:

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