본문 바로가기
통계프로그램 비교 시리즈/오라클함수 비교(R & Python)

REGEXP_REPLACE 오라클 함수 [Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table, DuckDB]

by 기서무나구물 2021. 12. 14.

포스팅 목차

    * 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크


    [ REGEXP_REPLACE Oracle Function ]

     

     


    REGEXP_REPLACE 함수는 입력 문자열에서 지정한 정규 표현식 패턴을 검색하여서 지정한 패턴(정규 표현식)과 일치하는 부분의 문자열을 다른 문자열로 치환한다. 복잡한 치환/검색 작업을 가능하도록 지원한다.

     

     

     


    1. Oracle(오라클)

     

    REGEXP_REPLACE() 함수

    입력 문자열(‘aaaaaaa’)에서 알파벳 문자를 검색하는 정규 표현식 패턴을 만족하는 부분을 다른 문자(‘x’)로 치환한다.

     

    Oracle Programming
    SELECT REGEXP_REPLACE('aaa1004qqq','([[:alpha:]])', 'x')  REGEXP_REPLACE
    FROM   DUAL

     

    Results
    REGEXP_REPLACE
    -------------------
    xxx1004xxx

     


    2. Python Pandas(파이썬)

     

    re.sub 함수

    입력 문자열(‘aaa1004qqq’)에서 알파벳 문자(a~z)를 검색하기 위한 정규 표현식 패턴을 만족하는 부분(‘aaa’와 ‘qqq’)을 다른 문자(‘x’)로 치환한다.

     

    Python Programming
    import re
    
    target = 'aaa1004qqq'
    target = re.sub(r'[a-z]','x',target)
    
    target

     

    Results
    'xxx1004xxx'

     


    replace 함수

     

    Python Programming
    str_DF = pd.DataFrame(['aaa1004qqq'],columns=['str'])
    
    str_DF['str'].str.replace(r'[a-z]', 'x')

     

    Results
    0    xxx1004xxx
    Name: str, dtype: object

     


    re.sub 함수

    : 문자열을 검색하여서 지정한 패턴과 일치하는 문자를 다른 문자로 교체한다.

     

    Python Programming
    [ re.sub(r"[a-z]", b, a) for a, b in zip(str_DF['str'], 'x') ]

     

    Results
    0    aaa1004qqq
    Name: str, dtype: object

     


    정규표현식과 REPLACE함수

     

    직무(job) 문자열에서 알파벳 문자(a~z)를 검색하는 정규 표현식 패턴을 만족하는 문자를 다른 문자(‘x’)로 치환한다.

     

    Python Programming
    emp['job'].str.lower().str.replace('[a-z]', 'x')

     

    Results
    0         xxxxx
    1      xxxxxxxx
    2      xxxxxxxx
    3       xxxxxxx
    4      xxxxxxxx
    5       xxxxxxx
    6       xxxxxxx
    7       xxxxxxx
    8     xxxxxxxxx
    9      xxxxxxxx
    10        xxxxx
    11        xxxxx
    12      xxxxxxx
    13        xxxxx
    Name: job, dtype: object

     


    [참고] string.translate()

     

    입력된 문자열의 개별 문자를 작성한 dictionry에서 검색하여서 일치하는 문자를 해당 수치로 변경한다.

     

    Python Programming
    dic = { "a": "1", "b": "2", "c": "3", "d": "4", "e": "5", "f": "6", "g": "7" }
    
    string = "abcdefghi"
    print(string.translate({ord(k): v for k, v in dic.items()}))

     

    Results
    1234567hi

     


    정규 표현식(정규식)과 re.sub 함수

    전화번호를 검색하여서 4자리 수치로 구상된 중간 부분과 마지막을 ‘XXXX’로 변경한다.

     

    Python Programming
    re.sub('\d{4}', 'XXXX', '010-1234-5678')

     

    Results
    '010-XXXX-XXXX'

     

     


    3. R Programming (R Package)

     

    stringr::str_replace_all() 함수

    입력 문자열(‘aaa1004qqq’)에서 알파벳 문자를 검색하기 위한 정규 표현식 패턴을 만족하는 부분(‘aaa’와 ‘qqq’)을 다른 문자(‘x’)로 치환한다.

     

    R Programming
    %%R
    
    stringr::str_replace_all('aaa1004qqq', "([[:alpha:]])", "x")

     

    Results
    [1] "xxx1004xxx"

     


    stringr::str_replace_all() 함수

    사원 이름(ename) 문자열에서 알파벳 문자(a~z)를 검색하기 위한 정규 표현식 패턴을 만족하는 문자를 다른 문자(‘x’)로 치환한다.

     

    R Programming
    %%R
    
    stringr::str_replace_all(emp$ename, "([[:alpha:]])", "x")

     

    Results
     [1] "xxxxx"  "xxxxx"  "xxxx"   "xxxxx"  "xxxxxx" "xxxxx"  "xxxxx"  "xxxxx" 
     [9] "xxxx"   "xxxxxx" "xxxxx"  "xxxxx"  "xxxx"   "xxxxxx"

     


    정규 표현식과 gsub() 함수

    입력 문자열(‘aaa1004qqq’)에서 알파벳 문자를 검색하기 위한 정규 표현식 패턴을 만족하는 부분(‘aaa’와 ‘qqq’)을 다른 문자(‘x’)로 치환한다.

     

    R Programming
    %%R
    
    gsub("[[:alpha:]]", "x", 'aaa1004qqq')

     

    Results
    [1] "xxx1004xxx"

     


    stringr::str_replace_all() 함수

    전화번호를 검색하여서 4자리 수치로 구상된 중간 부분과 마지막을 ‘XXXX’로 변경한다.

     

    R Programming
    %%R
    
    stringr::str_replace_all('010-1234-5678', "\\d{4}", 'XXXX')

     

    Results
    [1] "010-XXXX-XXXX"

     


    정규 표현식과 gsub() 함수

     

    R Programming
    %%R
    
    gsub("\\d{4}", 'XXXX', '010-1234-5678')

     

    Results
    [1] "010-XXXX-XXXX"

     

     


    4. R Dplyr Package

     

    • stringr::str_replace : 문자열에서 정규 표현식 패턴을 처음 일치하는 부분을 다른 문자열로 치환한다.
    • stringr::str_replace_all : 문자열에서 정규 표현식 패턴을 일치하는 모든 부분을 다른 문자열로 치환한다.

    직무(job) 문자열에서 알파벳 문자(a~z)를 검색하는 정규 표현식 패턴을 만족하는 문자를 다른 문자(‘x’)로 치환한다.

     

    R Programming
    %%R
    
    emp %>%
      dplyr::mutate( REG_REP_1 = stringr::str_replace(job,"([[:alpha:]])", "x" ),
                     REG_REP_2 = stringr::str_replace_all(job,"([[:alpha:]])", "x" ))

     

    Results
    # A tibble: 14 x 10
       empno ename  job        mgr hiredate     sal  comm deptno REG_REP_1 REG_REP_2
       <dbl> <chr>  <chr>    <dbl> <date>     <dbl> <dbl>  <dbl> <chr>     <chr>    
     1  7369 SMITH  CLERK     7902 1980-12-17   800    NA     20 xLERK     xxxxx    
     2  7499 ALLEN  SALESMAN  7698 1981-02-20  1600   300     30 xALESMAN  xxxxxxxx 
     3  7521 WARD   SALESMAN  7698 1981-02-22  1250   500     30 xALESMAN  xxxxxxxx 
     4  7566 JONES  MANAGER   7839 1981-04-02  2975    NA     20 xANAGER   xxxxxxx  
     5  7654 MARTIN SALESMAN  7698 1981-09-28  1250  1400     30 xALESMAN  xxxxxxxx 
     6  7698 BLAKE  MANAGER   7839 1981-03-01  2850    NA     30 xANAGER   xxxxxxx  
     7  7782 CLARK  MANAGER   7839 1981-01-09  2450    NA     10 xANAGER   xxxxxxx  
     8  7788 SCOTT  ANALYST   7566 1982-12-09  3000    NA     20 xNALYST   xxxxxxx  
     9  7839 KING   PRESIDE~    NA 1981-11-17  5000    NA     10 xRESIDENT xxxxxxxxx
    10  7844 TURNER SALESMAN  7698 1981-09-08  1500     0     30 xALESMAN  xxxxxxxx 
    11  7876 ADAMS  CLERK     7788 1983-01-12  1100    NA     20 xLERK     xxxxx    
    12  7900 JAMES  CLERK     7698 1981-12-03   950    NA     30 xLERK     xxxxx    
    13  7902 FORD   ANALYST   7566 1981-12-03  3000    NA     20 xNALYST   xxxxxxx  
    14  7934 MILLER CLERK     7782 1982-01-23  1300    NA     10 xLERK     xxxxx    

     

     


    5. R sqldf Package

     

    • SQLite extensions 

           [ stackoverflow 참고 ] replace a part of a string with REGEXP in sqlite3 [링크]

    • [ sqlite-regex-replace-ext 참고 ] [링크]

     

     


    6. Python pandasql Package

     

     


    7. R data.table Package

     

    • stringr::str_replace : 문자열에서 정규 표현식 패턴을 처음 일치하는 부분을 다른 문자열로 치환한다.
    • stringr::str_replace_all : 문자열에서 정규 표현식 패턴을 일치하는 모든 부분을 다른 문자열로 치환한다.

    직무(job) 문자열에서 알파벳 문자(a~z)를 검색하는 정규 표현식 패턴을 만족하는 문자를 다른 문자(‘x’)로 치환한다.

     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[,`:=`( REG_REP_1 = stringr::str_replace(job,"([[:alpha:]])", "x" ),                     # 패턴이 처음 매칭되는 문자열을 교체
              REG_REP_2 = stringr::str_replace_all(job,"([[:alpha:]])", "x" ))][1:10, ]        # 패턴을 만족하는 모든 문자열을 교체

     

    Results
        empno  ename       job  mgr   hiredate  sal comm deptno REG_REP_1 REG_REP_2
     1:  7369  SMITH     CLERK 7902 1980-12-17  800   NA     20     xLERK     xxxxx
     2:  7499  ALLEN  SALESMAN 7698 1981-02-20 1600  300     30  xALESMAN  xxxxxxxx
     3:  7521   WARD  SALESMAN 7698 1981-02-22 1250  500     30  xALESMAN  xxxxxxxx
     4:  7566  JONES   MANAGER 7839 1981-04-02 2975   NA     20   xANAGER   xxxxxxx
     5:  7654 MARTIN  SALESMAN 7698 1981-09-28 1250 1400     30  xALESMAN  xxxxxxxx
     6:  7698  BLAKE   MANAGER 7839 1981-03-01 2850   NA     30   xANAGER   xxxxxxx
     7:  7782  CLARK   MANAGER 7839 1981-01-09 2450   NA     10   xANAGER   xxxxxxx
     8:  7788  SCOTT   ANALYST 7566 1982-12-09 3000   NA     20   xNALYST   xxxxxxx
     9:  7839   KING PRESIDENT   NA 1981-11-17 5000   NA     10 xRESIDENT xxxxxxxxx
    10:  7844 TURNER  SALESMAN 7698 1981-09-08 1500    0     30  xALESMAN  xxxxxxxx

     


    8. Python Duckdb의 SQL

     

    Python Programming
    %%sql
      SELECT REGEXP_REPLACE('aaaaaaa','([[:alpha:]])', 'x') REG_REPLACE

     

    Python Programming
    duckdb.sql(" SELECT REGEXP_REPLACE('aaaaaaa','([[:alpha:]])', 'x') AS REG_REPLACE ").df()

     

    Results
      REG_REPLACE
    0     xaaaaaa

     


    ( https://unsplash.com/photos/JD0D-lReHFE )

      --------------------------------------------  

     

     

    [Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table] 오라클 함수와 R & Python 비교 사전 목록 링크

     

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크
    반응형

    댓글