• HIVE SQL regexp_extract和regexp_replace配合使用正则提取多个符合条件的值


    《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。

    如何使用regexp_extract&regexp_replace函数将以上文本中所有书籍名称都提取出来?

    select 	substr(
    				regexp_replace(
    				regexp_extract(
    				regexp_replace(regexp_replace('《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。','<<','《'),'>>','》')
    				,'(.*》)',1)
    				,'.*?(《[^》|^《]+》)',',$1')
    			,2) as books
    ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    代码解析:
    step1:两个regexp_replace()依次将<<规整为,将>>规整为
    step2:regexp_extract正则提取满足pattern='.*》'时的值,此操作的主要目的为剔除最后一个书名号后的文本内容

    select 	
    				regexp_extract(
    				regexp_replace(regexp_replace('《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。','<<','《'),'>>','》')
    				,'(.*》)',1)
    		
    ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    此时提取出来的结果为:

    《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有《1984》

    step3:regexp_replace将书名号前边的内容替换成

    #此处的$1是指第一个小括号中的匹配结果
    select 	
    				regexp_replace(
    				'《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有《1984》'
    				,'.*?(《[^》|^《]+》)',',$1')
    ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    此时提取出来的结果为:

    ,《平凡的世界》,《巴黎圣母院》,《1984》

    此处需要注意的是:
    *1).正则表达式中用了非贪婪匹配.*?,如果使用贪婪匹配.*,最终返回的结果将会是

    ,《1984》

    *2)若省去step2的操作,提取出来的结果不满足条件

    select 	
    				regexp_replace(
    				regexp_replace(regexp_replace('《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。','<<','《'),'>>','》')
    				,'.*?(《[^》|^《]+》)',',$1')
    ;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    此时提取出来的结果为:

    ,《平凡的世界》,《巴黎圣母院》,《1984》也蛮好看。

    step4:substr截取除第一个逗号之外的其余内容

    select substr(',《平凡的世界》,《巴黎圣母院》,《1984》',2)
    ;
    
    • 1
    • 2

    最终提取出来的结果为:

    《平凡的世界》,《巴黎圣母院》,《1984》

  • 相关阅读:
    关于uni-app与vue路由配置的不同,不使用uni.navigateTo接口跳转时,使用this.$router.push的踩坑经验
    【深入理解TcaplusDB技术】如何实现Tmonitor单机安装
    Centos 7双网卡绑定配置
    NLP模型笔记2022-20:py2neo接口处理知识图谱neo4j实体
    零基础小白该如何学黑客?
    【python爬虫】14.Scrapy框架讲解
    Umijs介绍
    Web知识:markupsafe.escape() 函数的作用
    基于PHP+MySQL游戏视频网站的设计与实现
    共享股东模式:创新方法助力连锁门店扩展业务并提高利润
  • 原文地址:https://blog.csdn.net/p1306252/article/details/133384270