포스팅 목차
* 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
[ REGEXP_SUBSTR Oracle Function ]
REGEXP_SUBSTR 함수는 입력한 문자열에서 지정한 정규식 패턴을 검색하여서 지정한 패턴(정규 표현식)과 일치하는 부분의 문자열을 반환한다. REGEXP_SUBSTR함수는 정규 표현식 패턴을 통하여 문자열을 검색할수 있도록 REPLACE 함수의 기능을 확장한 것이다. REGEXP_INSTR과 유사하나, substring의 위치를 반환하는 것이 아니라, substring 문자열 자체를 반환한다. 이 함수는 패턴과 일치하는 문자열의 위치는 필요하지 않고, 문자열의 내용이 필요한 경우에 유용하다. 함수는 source_string으로써 같은 문자 세트안에서 VARCHAR2 또는 CLOB 데이터와 같은 문자열을 반환한다.
- 함수설명 : REGEXP_SUBSTR 오라클 함수 링크
1. Oracle(오라클)
REGEXP_SUBSTR() 함수
다음 예제는 문자열을 검색하여서 쉼표를 기준으로 구분된 문자열 중에서 처음에 위치한 문자열(substring)을 검색한다. 정규 표현식 패턴은 이 작업을 위하여 쉼표사이에 쉼표 이외의 문자가 1개 이상 존재하는 문자열을 검색한다. 앞뒤에 존재하는 쉼표를 포함한 문자열을 반환한다.
Oracle Programming |
SELECT REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA',
',[^,]+,') "REGEXPR_SUBSTR"
FROM DUAL;
Results |
REGEXPR_SUBSTR
, Redwood Shores,
2. Python Pandas(파이썬)
정규표현식과 re.search() 함수
지정한 정규표현식 패턴과 일치하는 문자열 중에서 처음에 위치한 문자열을 반환한다.
Python Programming |
import re
m = re.search(',[^,]+,', '500 Oracle Parkway, Redwood Shores, CA')
m.group(0)
Results |
', Redwood Shores,'
re.findall() 함수
지정한 정규표현식 패턴과 일치하는 모든 문자열을 리스트 형태로 반환한다.
Python Programming |
re.findall(',[^,]+,', '500 Oracle Parkway, Redwood Shores, CA')
Results |
[', Redwood Shores,']
pandas.Series.str.extract
: 지정한 패턴과 일치하는 문자열 중에서 처음에 위치한 문자열을 반환한다.
Python Programming |
p = r'\b[a-z]\b'
pd.DataFrame(['500 Oracle Parkway, Redwood Shores, CA'],columns=['col_str']).col_str.str.extract(r'(,[^,]+,)')
Results |
0
0 , Redwood Shores,
pandas.Series.str.extractall
- : 지정한 패턴과 일치하는 모든 문자열을 반환한다.
Python Programming |
p = r'\b[a-z]\b'
pd.DataFrame(['500 ,Oracle Parkway, ,Redwood Shores, CA'],columns=['col_str']).col_str.str.extractall(r'(?P<pattern>\,[^,]+,)')
Results |
pattern
match
0 0 ,Oracle Parkway,
1 ,Redwood Shores,
re.search 함수
: 지정한 패턴과 일치하는 문자열 중에서 처음에 검색된 문자열을 반환한다.
Python Programming |
pd.DataFrame(['500 Oracle Parkway, Redwood Shores, CA'],columns=['col_str']).col_str.apply(lambda x: re.search(',[^,]+,', x).group(0) )
Results |
0 , Redwood Shores,
Name: col_str, dtype: object
3. R Programming (R Package)
stringi::stri_extract_first_regex
: 입력한 문자열에서 지정한 정규식 패턴을 검색하여서 지정한 패턴(정규 표현식)과 일치하는 문자열 중에서 처음에 검색된 문자열을 반환한다.
R Programming |
%%R
stringi::stri_extract_first_regex('500 Oracle Parkway, Redwood Shores, CA',',[^,]+,')
Results |
[1] ", Redwood Shores,"
stringr::str_extract
R Programming |
%%R
stringr::str_extract('500 Oracle Parkway, Redwood Shores, CA',',[^,]+,')
Results |
[1] ", Redwood Shores,"
stringi::stri_extract_all() 함수
R Programming |
%%R
stringi::stri_extract_all(regex = ",[^,]+,", "500 Oracle Parkway, Redwood Shores, CA")
Results |
[[1]]
[1] ", Redwood Shores,"
- base::regmatches : regexpr, gregexpr 또는 regexec 함수에서 획득된 패턴 매칭 정보를 사용하여서 패턴과 일치하는 문자열을 추출하거나 교체합니다.
- base::regexpr : 입력 문자열에서 지정한 정규식 패턴과 일치하는 문자열을 검색하고 지정한 패턴(정규 표현식)과 일치하는 문자열이 시작하는 인덱스와 일치하는 문자열의 길이를 반환한다.
base::regexpr 함수로 패턴과 일치하는 문자열의 패턴 정보(위치와 길이 정보)를 추출하여서 base::regmatches 함수로 일치하는 문자열을 추출한다.
R Programming |
%%R
base::regmatches('500 Oracle Parkway, Redwood Shores, CA', base::regexpr(',[^,]+,', '500 Oracle Parkway, Redwood Shores, CA') )
Results |
[1] 19
attr(,"match.length")
[1] 17
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
base::gregexpr
: 입력 문자열에서 지정한 정규식 패턴과 일치하는 모든 문자열의 패턴 정보(위치와 길이 정도)를 반환한다.
R Programming |
%%R
base::gregexpr(',[^,]+,','500 Oracle Parkway, Redwood Shores, CA',perl=TRUE)
Results |
[[1]]
[1] 19
attr(,"match.length")
[1] 17
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
stringr::str_extract
: 입력 문자열에서 지정한 정규식 패턴과 일치하는 문자열을 추출한다.
R Programming |
%%R
col_frame <- data.frame("col_str" = c("500 Oracle Parkway, Redwood Shores, CA"))
sapply(col_frame, function(x) stringr::str_extract(x, ",[^,]+,"))
Results |
col_str
",Oracle,"
4. R Dplyr Package
stringr::str_extract
: 입력 문자열에서 지정한 정규식 패턴과 일치하는 문자열을 추출한다.
R Programming |
%%R
col_frame <- data.frame("col_str" = c("500 Oracle Parkway, Redwood Shores, CA"))
col_frame %>%
dplyr::mutate( REGEXP_SUBSTR = stringr::str_extract(col_str,',[^,]+,') )
Results |
col_str REGEXP_SUBSTR
1 500 Oracle Parkway, Redwood Shores, CA , Redwood Shores,
5. R sqldf Package
6. Python pandasql Package
7. R data.table Package
stringr::str_extract
: 입력 문자열에서 지정한 정규식 패턴과 일치하는 문자열을 추출한다.
R Programming |
%%R
col_frame <- data.frame("col_str" = c("500 Oracle Parkway, Redwood Shores, CA"))
DT <- data.table(col_frame)
DT[, REGEXP_SUBSTR := stringr::str_extract(col_str,',[^,]+,') ]
Results |
col_str REGEXP_SUBSTR
1: 500 Oracle Parkway, Redwood Shores, CA , Redwood Shores,
[참고]
패턴 구분자를 기준으로 문자열을 분할하여서 개별 변수를 생성한다.
- data.table::tstrsplit 함수 : transpose(strsplit(…)) 과 동일한 역할을 수행
R Programming |
%%R
col_frame <- data.frame("col_str" = c("500 Oracle Parkway, Redwood Shores, CA"))
DT <- data.table(col_frame)
DT[, c("Col1", "Col2") := data.table::tstrsplit(col_str, ',[^,]+,')]
Results |
col_str Col1 Col2
1: 500 Oracle Parkway, Redwood Shores, CA 500 Oracle Parkway CA
transpose() 함수
R Programming |
%%R
col_frame <- data.frame("col_str" = c("500 Oracle Parkway, Redwood Shores, CA"))
DT <- data.table(col_frame)
DT[, transpose(strsplit(col_str, ',[^,]+,'))]
Results |
V1 V2
1: 500 Oracle Parkway CA
8. Python Duckdb의 SQL
Python Programming |
%%sql
SELECT regexp_extract('500 Oracle Parkway, Redwood Shores, CA',
',[^,]+,') "REGEXPR_SUBSTR_1"
Python Programming |
duckdb.sql(" SELECT regexp_extract('500 Oracle Parkway, Redwood Shores, CA', \
',[^,]+,') AS REG_SUBSTR ").df()
Results |
REG_SUBSTR
0 , Redwood Shores,
--------------------------------------------
[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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크 |
댓글