포스팅 목차
* 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
[ REGEXP_REPLACE Oracle Function ]
REGEXP_REPLACE 함수는 입력 문자열에서 지정한 정규 표현식 패턴을 검색하여서 지정한 패턴(정규 표현식)과 일치하는 부분의 문자열을 다른 문자열로 치환한다. 복잡한 치환/검색 작업을 가능하도록 지원한다.
- 함수 설명 : 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
--------------------------------------------
[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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크 |
댓글