美文网首页
正则-从数字字符串中匹配想要的数字

正则-从数字字符串中匹配想要的数字

作者: 蜡笔不好吃 | 来源:发表于2019-07-06 22:29 被阅读0次

    背景

    正则表达式主要应用在字符串的匹配搜索上,而且非常强大。这次遇到的问题就和正则有关

    在写SQL的时候,有一列是投诉原因,多选项,不同原因会组合到一起,不同的数字代表不同的投诉类型,现在我想要判断指定的投诉原因是否在里面。
    举个栗子

    序号 投诉原因
    1 1,3,5,7,9,10
    2 2,24,25
    3 24,25

    现在我要判断投诉原因中有2或者3的都算是。

    问题

    开始的时候正则是

    --- regexp_like 是 Presto的正则匹配函数
    select 
      index, --序号
      if(regexp_like(aa.feedback_reason,'2|3'),'是','否') as complain_flag --判断
    from  
      table_1 aa
    

    但是结果显示
    1 是
    2 是
    3 是

    3为什么结果是“是”???

    解决

    因为正则写的是

    pattern= '2|3'
    

    问题出在这里,序号3的数据里面 str = '24,25' 是包含2的,正则这样写的话,只要出现2就判断为是。可是我们想要的是2而不是24,25。那就得改写正则表达式

    pattern = '\b2\b|\b3\b'
    

    看到这里或许你就明白了,\b是在加边界,告诉计算机,我需要的是2这个数字,而不是随便匹配到2就可以。(即24里面的2不是我想要,我要的是有边界的2)
    所以解决这个问题的关键就是 单词边界 也就是\b

    所以最终的SQL是

    select 
      index, 
      if(regexp_like(aa.feedback_reason,'\b2\b|\b3\b'),'是','否') as complain_flag 
    from  
      table_1 aa
    

    正则表达式在线测试:http://tool.oschina.net/regex/
    参考:https://zhidao.baidu.com/question/987099792816138779.html

    相关文章

      网友评论

          本文标题:正则-从数字字符串中匹配想要的数字

          本文链接:https://www.haomeiwen.com/subject/ivnmhctx.html