【问题标题】:Hive searching for substring with word boundariesHive 搜索具有单词边界的子字符串
【发布时间】:2013-11-18 18:52:59
【问题描述】:

我正在使用 Hive,并且有一个字符串数据库。我想要带有某些单词的行,但需要单词边界(如果我正在搜索“transport”,我不想要带有“transporter”的行)。我该怎么做?

目前,我正在执行以下操作:

hive> select * from myTable where (length(regexp_extract(column1, 'transport', 0)) > 0);

但显然这并没有包含任何单词边界。

提前致谢!

【问题讨论】:

    标签: regex string word hive boundary


    【解决方案1】:

    Hive 使用 正则表达式语法。您可以尝试以下方法。

    regexp_extract(column1, '\btransport\b')
    

    如果失败,请尝试双重转义您的单词边界\\b

    【讨论】:

      【解决方案2】:

      我知道在符合 POSIX 的正则表达式中,单词边界是这样的:[[:<:]][[:>:]]

      [[:<:]]transport[[:>:]]
      

      但是不知道hiveQL是否支持。

      【讨论】:

      • [[:<:>:]] 有效,但仅适用于其中没有其他单词的字符串(出于某种或其他原因)。我发现了一些确实有效的东西,因为每个单词要么以空格或左侧的“”为边界,因此我选择了: hive> select * from myTable where (column1 regexp ' (.*)[ |](.*)');
      • @user3005925:你试过select * from myTable where column1 regexp '[[:&lt;:]]transport[[:&gt;:]]';吗?因为奇怪的是你必须在前后加上一些(.*)来描述所有的字符串!
      猜你喜欢
      • 2013-06-22
      • 1970-01-01
      • 2016-05-30
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多