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

Posted

技术标签:

【中文标题】必须通过剥离符号 ^ 字符的最后一次出现以通过正则表达式提取结束来提取单词的开头【英文标题】:Have to extract the start of word by stripping the last occurrence of symbol ^ characters to end by regex extract 【发布时间】:2018-06-10 12:10:17 【问题描述】:

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

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

我只需要处理正则表达式,而不需要处理字符串函数或 udf。

【问题讨论】:

这不行吗? ***.com/questions/8374742/regex-last-occurrence 【参考方案1】:

试试 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|
+---+

【讨论】:

我已经尝试过这个例子,它是成功的。感谢您的快速帮助。 如果我尝试使用 spark sql 进行相同的查询,则不会为提取列返回数据。 DataFrame df= hiveContext.sql("select regexp_extract(eid,'(.*)\\^',1) as eid1,name from employee"); System.out.println("模式"+df.schema()); System.out.println("第一条记录"+df.first());第一条记录[,耙] 请用三引号括起来val df= hiveContext.sql("""select regexp_extract('101^11','(.)\\^' ,1)""");* 它应该可以工作..!! 我正在尝试使用 spark sql java,它在 eclipse 中显示三引号错误。

以上是关于必须通过剥离符号 ^ 字符的最后一次出现以通过正则表达式提取结束来提取单词的开头的主要内容,如果未能解决你的问题,请参考以下文章

将 JavaScript 通过 websockets 发送的最后一个字符剥离到 Python

python----发轫之始正则表达式总结

8-2正则表达式元字符详解 1

第十节 正则表达式

linux正则表达式

php常见正则表达式