zoukankan      html  css  js  c++  java
  • regexp_replace

    pandas和SQL数据分析实战

    https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&shareId=400000000398149

    举例

     

    hive中 regexp_replace的用法,替换特殊字符问题

    数据仓库中有的字段不合格,有特殊字符,比如换行符。

    poi_name
    
    19013
    
    12013

    怎么把换行符替换掉呢?

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringOperators

    regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

    Returns the string resulting from replacing all substrings in INITIAL_STRING that match the java regular expression syntax defined in PATTERN with instances of REPLACEMENT. For example, regexp_replace("foobar", "oo|ar", "") returns 'fb.' Note that some care is necessary in using predefined character classes: using 's' as the second argument will match the letter s; 's' is necessary to match whitespace, etc.

    官网说用两个反斜杠代替一个,即一个反斜杠用来转义。

    实践了一下,不行,得4个

    select regexp_replace(poi_name,'\\n','') 
    
    poi_name
    19013
    12013
    

      

       

    转自

    https://blog.csdn.net/weixin_43767002/article/details/85605220

    https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm

    regexp_replace函数是replace函数的扩展函数,用于通过正则表达式来进行匹配替换,默认情况下,每次匹配到的正则,都替换为replace_string,返回的字符串与source_char字符集相同。如果source_char为非LOB类型,则返回varchar2数据类型,如果为LOB类型,则返回CLOB类型,该函数符合POSIX正则和Unicode正则。

    source_char是一个用作搜索的值,它通常是一种字符列,可以以下是任何数据类型CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOB

    pattern是正则表达式,可以是以下任意数据类型CHAR、VARCHAR2、NCHAR、NVARCHAR2。最多可包含512个字节。如果pattern数据类型与source_char异同,则Oracle将转换pattern的数据类型与source_char的一致。

    replace_string可以是以下任意数据类型CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOB。如果replace_string是CLOB或NCLOB,则Oracle截断replace_string为32K。replace_string可含有多达500个反向引用作为子表达式,其形式为 ,n为数字1~9。如果n在replace_string中为反斜线字符,则需使用转移字符在其前面()

    position是一个正整数,表示在source_char中Oracle应该开始搜索的字符。默认值为1,表示Oracle以第一个字符开始搜索。

    occurrence是一个非负整数,表示替换动作的发生,如果为0,则Oracle将替换所有匹配项,如果为正整数n,则Oracle将替换第n个匹配项。

    match_parameter是一个文本文件,用于更改匹配行为,仅影响匹配过程,并不影响replace_string。可以指定以下一个或多个值:
    ‘i’指定不区分大小写的匹配
    ‘c’区分大小写的匹配
    ‘n’允许‘.’(句点,配置任意字符)匹配换行符,如果省略此此参数,则句点与换行符不匹配
    ‘m’将源字符串视为多行。Oracle将源字符串中的^或$视为行首或行尾,如果省略此参数,Oracle将源字符串视为单行
    ‘x’忽略空格字符。默认情况下,空白字符与自身匹配。
    如果指定多个矛盾值,Oracle将使用最后一个值,例如指定’ic’,则Oracle使用区分大小写匹配,如果指定的不是上述字符,则返回错误
    如果省略match_parameter,则:
    1.默认的区分大小写由NLS_SORT参数的值决定
    2.句点‘.’与换行符不匹配
    3.源字符串视为单行

    以上中文内容为本人自行翻译,仅供参考

    实验:
    以下开始通过实验验证各参数功能的使用
    简单使用:
    实验 1:

    SQL> select regexp_replace('0123456789','01234','0abc') from dual;


    实验 4:

    SQL> select regexp_replace('+86 13811112222','(+[0-9]{2})( )([0-9]{3})([0-9]{4})([0-9]{4})','(1)3-4-5') as new_str from dual;
    

      

    附:正则表达式(POSIX标准扩展正则ERE)

    符号 释义
    代表它自己、引用下一个字符、引入一个操作符、什么也不做
    * 匹配零或多个
    + 匹配一个或多个
    ? 匹配零个或一个
    | 或运算,其左右操作数均可以为一个子表达式
    ^ 默认情况下匹配字符串的结尾。在多行模式下,它匹配源字符串中任意位置的行尾
    $ 默认情况下匹配字符串的开头。在多行模式下,它匹配源字符串中任意位置的行头
    . 匹配字符集中支持的任意字符,NULL除外
    [ ] 用于指定匹配列表的括号表达式
    ( ) 对表达式进行分组,将其视为单个子表达式
    {m} 恰好匹配m次
    {m,} 匹配至少m次
    {m,n} 匹配至少m次,但不超过n次
    反向引用表达式(n为1~9)匹配在 之前的圆括号内包含的第n个子表达式
    [. .] 指定排序规则,可以是多字符元素(例如,西班牙语中的[.ch.])
    [: :] 指定字符类(例如,[:alpha:]),它匹配字符类中的任何字符
    [= =] 指定等价类。(例如,[=a=]匹配索引具有基本字母a的字符)
    https://docs.oracle.com/cd/B19306_01/server.102/b14200/ap_posix001.htm#BABJDBHB
    以上资料来源于Oracle官网,由本人自行理解翻译,如若有误请指正

    [: :]字符类:

    [:xxxx:] 含义 范围
    [:space:] 包括换行符、空格、tab在内的空白字符 tab、空格
    [:blank:] 空格和tab tab、空格
    [:alpha:] 字母 a-z、A-Z
    [:alnum:] 字母和数字 a-z、A-Z、0-9
    [:digit:] 十进制数 0-9
    [:xdigit:] 十六进制数 0-9、a-f、A-F
    [:lower:] 小写字母 a-z
    [:upper:] 大写字母 A-Z
    [:cntrl:] 控制字符 ctrl、backspace等
    [:punct:] 标点符号 ,.?’

     python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制)

    网易云观看地址

    https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share

    扫二维码,关注博主主页,学习更多Python知识

  • 相关阅读:
    jsp第八次作业
    jsp第七次作业
    jsp第六次作业
    jsp第五次作业
    jsp第二次作业
    软件测试第一次作业
    第一本书的学习笔记
    第零次作业
    software engineering task0
    自己创建的mysql用户无法使用密码登录,直接用用户名就可以登录的问题
  • 原文地址:https://www.cnblogs.com/webRobot/p/11302005.html
Copyright © 2011-2022 走看看