R

[R] grep, 정규표현식(Regular Expression)

ㄷㅐ장님 2022. 2. 3. 18:34

grep

: 동일한 문자열을 벡터에서 찾아서 인덱스번호, 문자열을 리턴하는 함수.
특정한 단어가 벡터안에 있는지 찾는 함수.

text <- c('a','ab','acb','accb','acccb','ccccb')
'a' %in% text #문자 'a' 자체가 있으면 TRUE
text %in% 'a'
text[text %in% 'a']
which(text %in% 'a')
text[which(text %in% 'a')]

grep('a',text) #글자 a가 존재하면 위치 리턴
grep('ab',text) #연속되는 'ab'글자가 있으면 위치 리턴
grep('c',text,value = T) #value = T 단어 그대로 리턴

 

정규표현식(Regular Expression)

* : 적어도 0번 이상의 패턴을 찾는다

grep('ac*b',text,value = T) #'c*' : 'c'가 적어도 0번 이상(있을수도 없을수도)의 패턴을 찾는다


+ : 적어도 1번 이상의 패턴을 찾는다

grep('ac+b',text,value = T) #'c+' : 'c'가 적어도 1번 이상의 패턴을 찾는다


? : 적어도 0번 또는 1번의 패턴을 찾는다

grep('ac?b',text,value = T) #'c?' : 'c'가 없거나 1번 존재할때


{n} : n번의 패턴을 찾는다

grep('ac{2}b',text,value = T) #'c{2}' : 'c'가 2번 존재할때
grep('ac{3}b',text,value = T) #'c{3}' : 'c'가 3번 존재할때


{n,} : n번 이상의 패턴을 찾는다

grep('ac{2,}b',text,value = T) #'c{2,}' : 'c'가 2번이상 존재할때


{n,m} : n번부터 m번까지의 패턴을 찾는다.

grep('ac{2,3}b',text,value = T) #'c{2,3}' : 'c'가 2번이상 3번이하 존재할때

^ : 시작, 시작되는 문자를 찾는다.

grep('^ab',text,value = T) #'^ab' : 'ab'로 시작하는 문자


$ : 끝, 끝나는 문자를 찾는다.

grep('ab$',text,value = T) #'ab$' : 'ab'로 끝나는 문자


\\b : 시작되는 문자를 찾는데 빈문자열 뒤에 시작되는 문자도 찾는다.

grep('\\bab',text,value = T)


text <- c('^ab','ab','abc','abd','abe','ab 12','$ab','ca^bd','ab','abcd','abcfd','abfd')

\\*,\\+,\\?,\\^,\\$ : 정규표현식이 아닌 순수한 글자로 표현할 때 사용

grep('\\^ab',text,value=T)


. : 어떤 문자 하나를 의미한다.

grep('.',text,value=T)
grep('ab.',text,value=T) #'ab.' : 'ab' 뒤에 1글자 이상이 있어야함
grep('ab..',text,value=T) #'ab..' : 'ab' 뒤에 2글자 이상이 있어야함
grep('ab...',text,value=T) #'ab...' : 'ab' 뒤에 3글자 이상이 있어야함

grep('abc',text,value = T) #'abc'가 포함된 벡터 리턴
grep('^abc',text,value = T) #'abc'로 시작하는 벡터 리턴
grep('^abc$',text,value = T) #'abc'로 시작해서 끝나는 벡터 리턴

[  ] : 리스트 안에 있는 문자패턴을 찾는다.

grep('ab[c,d]',text,value = T) #'ab[c,d]' : 'abc'로 시작하거나 'abd'로 시작하는 문자


[n-m] : 리스트 안에 n부터 m까지 문자패턴을 찾는다.

grep('ab[c-e]',text,value=T) #'ab[c-e]' : 'abc' ,'abd', 'abe'로 시작하는 문자


[^] : 리스트 안에 있는 ^는 not을 의미한다.

grep('ab[^c]',text,value=T)
grep('ab[^c,d,e]',text,value=T)
grep('ab[^c-e]',text,value=T)


text <- c('sql','SQL','sql100','PLSQL','plsql','R','r','r0','python','PYTHON','pyth0n','python#',
          '100','*100','*','&','^','%','$','#','@','!','~','(',')','행복','ㅋㅋㅋ','ㅠㅠㅠㅠ')

숫자를 찾는 방법
[0-9]
\\d #숫자제외 : '\\D'
[[:digit:]]

grep('[0-9]',text,value = T)
grep('\\d',text,value = T) #숫자제외 : '\\D'
grep('[[:digit:]]',text,value = T)

대문자를 찾는 방법
[A-Z]
[[:upper:]]

grep('[A-Z]',text,value = T)
grep('[[:upper:]]',text,value = T)


소문자를 찾는 방법
[a-z]
[[:lower:]]

grep('[a-z]',text,value = T)
grep('[[:lower:]]',text,value = T)


대소문자를 찾는 방법
[A-Za-z]
[A-z] #특수문자 ^ 포함
[A-Za-z\\^] #특수문자 ^ 포함

grep('[A-Za-z]',text,value = T)
grep('[A-z]',text,value = T) #특수문자 ^ 포함
grep('[A-Za-z\\^]',text,value = T) #특수문자 ^ 포함

한글을 찾는다
[가-힣] #한글만
[ㄱ-ㅣ] #자음모음만
[가-힣ㄱ-ㅣ] #한글 전부

grep('[가-힣]',text,value = T) #한글만
grep('[ㄱ-ㅣ]',text,value = T) #자음모음만
grep('[가-힣ㄱ-ㅣ]',text,value = T) #한글 전부


영어,한글 전부
[A-Za-z가-힣ㄱ-ㅣ]
[[:alpha:]]

grep('[A-Za-z가-힣ㄱ-ㅣ]',text,value=T)
grep('[[:alpha:]]',text,value = T) #문자열 전부

문자,숫자 있는 문자 패턴을 찾는 방법
[A-Za-z가-힣ㄱ-ㅣ0-9]
[[:alnum:]]
\\w

grep('[A-Za-z가-힣ㄱ-ㅣ0-9]',text,value=T)
grep('[[:alnum:]]',text,value = T)
grep('\\w',text,value = T)


특수문자가 있는 문자패턴을 찾는 방법
\\W
[[:punct:]]

grep('\\W',text,value = T)
grep('[[:punct:]]',text,value = T)

숫자제외
[^0-9]
\\D #숫자만 : '\\d'
[^[:digit:]] #괄호 사이에 ^(not)

grep('[^0-9]',text,value = T)
grep('\\D',text,value = T) #숫자만 : '\\d'
grep('[^[:digit:]]',text,value = T) #괄호 사이에 ^(not)

글자1 또는 글자2의 문자패턴을 찾는 방법
(글자|글자2)

grep('Ste(v|ph)en',employees$FIRST_NAME,value = T)


data <- "R is a programming language and free software environment for statistical computing 
and graphics supported by the R Foundation for Statistical Computing.[6] The R language is 
widely used among statisticians and data miners for developing statistical software[7] and data
analysis.[8] Polls, data mining surveys, and studies of scholarly literature databases show 
substantial increases in popularity;[9] as of January 2021, R ranks 9th in the TIOBE index, 
a measure of popularity of programming languages.[10] A GNU package,[11] the official R 
software environment is written primarily in C, Fortran, and R itself[12] (thus, it is partially 
self-hosting) and is freely available under the GNU General Public License. Pre-compiled 
executables are provided for various operating systems. Although R has a command line 
interface, there are several third-party graphical user interfaces, such as RStudio, 
an integrated development environment, and Jupyter, a notebook interface.[13][14]"

[문제183] 첫문자가 대문자로 시작되는 단어를 찾으세요.

1) 공백문자 기준으로 단어 분리

x <- unlist(strsplit(data,split = ' '))

2) 첫문자가 대문자로 시작되는 단어 찾기

grep('^[A-Z]{1,}',x,value = T)
grep('^[[:upper:]]{1,}',x,value = T)


[문제184] 숫자가 있는 단어를 찾아주세요.

grep('\\d',x,value = T)
grep('[[:digit:]]{1,}',x,value=T)

 

[문제185] 특수문자가 있는 단어를 찾아주세요.

grep('\\W',x,value=T)
grep('[[:punct:]]',x,value=T)
grep('[[:punct:]]{1,}',x,value=T)


[문제186] [숫자]가 있는 단어를 찾아주세요.

grep('\\[\\d\\]',x,value = T) #한자리수만
grep('\\[\\d+\\]',x,value = T) #숫자가 적어도 한번 이상=두자리수 이상