gpt4 book ai didi

regex - 使用 REGEXP_EXTRACT 没有给出预期的结果 - Hive

转载 作者:可可西里 更新时间:2023-11-01 15:09:44 25 4
gpt4 key购买 nike

我正在尝试在 Hive 中使用 REGEXP_EXTRACT 函数从列中获取所需的字符串。列中数据的形式为:

单词\more_words

我需要提取 \ 之后的字符串部分。我试着做这样的事情:

SELECT REGEXP_EXTRACT('words\more_words','(.*)(\\+)(.*)',3) -> 不返回任何内容

SELECT REGEXP_EXTRACT('words\more_words','.*(\\+)(.*)',2) -> 不返回任何内容

SELECT REGEXP_EXTRACT('words\more_words','\w+(\\+)(\w+)',2)-> 什么都不返回

SELECT REGEXP_EXTRACT('words\more_words','\\+(\w+)',1) -> 什么都不返回

我已验证以上所有正则表达式都匹配 regex101.com 上的 words\more_words(除了最后一个匹配 \more_words )。但是,我完全不知道为什么 hive 没有给出预期的结果。

我不确定我是否做错了什么。所以,为了验证,我这样做了:

SELECT REGEXP_EXTRACT('words\more_words','.*\\.*',0) -> 返回 'wordsmore_words'

不确定为什么从结果中删除了 \。从技术上讲,正则表达式应该匹配整个字符串,结果应该是整个字符串,对吗?

如何提取 \ 之后的字符串部分?任何帮助,将不胜感激。谢谢!

最佳答案

单个文字反斜杠定义为'\\' .也就是说,如果一个字符串包含 \ ,您应该在字符串文字中使用两个反斜杠 '\\' .

在正则表达式中,双文字反斜杠可用于匹配文字反斜杠。字符串模式 \\应该写成'\\\\'为了匹配单个文字 backsalsh。

使用

SELECT REGEXP_EXTRACT('words\\more_words','.*\\\\+(.*)',1)

请注意 'words\\more_words'是定义 words\more_words 的字符串文字文字串。

图案细节

  • .* - 除换行字符外的任何 0+ 个字符,尽可能多
  • \\\\+ - 1 个或多个文字 \字符
  • (.*) - 捕获第 1 组:除换行字符外的任何 0+ 个字符,尽可能多(在 1 函数的最后一个 REGEXP_EXTRACT 参数的帮助下返回)。

关于regex - 使用 REGEXP_EXTRACT 没有给出预期的结果 - Hive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48175916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com