티스토리 뷰

특정한 패턴에 맞는 단어를 추출하는 연습을 해보았습니다.


우선 연습데이터를 생성해줍니다.

> fruits_names <- paste0('name=', c('apple_01', 'orange_01', 'orange_2'))
> fruits_names
[1] "name=apple_01"  "name=orange_01" "name=orange_2" 

간단하게 name=뒤에 과일 이름과 숫자가 연결된 형태를 만들었습니다.

 

str_match를 이용해서 우선 원하는 패턴을 찾습니다.

[:alpha:]는 알파벳을 인식하고, [:digit:]는 숫자를 인식합니다.

이때 [:alpha:] 뒤의 *는 해당 알파벳이 0개 이상을 인식하겠다는 의미입니다. 

또한 [:digit:] 뒤의 +는 해당 숫자가 1개 이상 있을것이라는 의미입니다.

> str_match(fruits_names, 'name=[:alpha:]*_[:digit:]+')
     [,1]            
[1,] "name=apple_01" 
[2,] "name=orange_01"
[3,] "name=orange_2" 
[:punct:] punctuation. 
[:alpha:] letters. 
[:lower:] lowercase letters. 
[:upper:] upperclass letters. 
[:digit:] digits. 
[:xdigit:]  hex digits. 
[:alnum:] letters and numbers. 
[:cntrl:] control characters. 
[:graph:] letters, numbers, and punctuation. 
[:print:] letters, numbers, punctuation, and whitespace. 
[:space:] space characters (basically equivalent to \s). 
[:blank:] space and tab.
?   0 or 1
 1 or more
 0 or more

 

이때 입력해준 pattern에서 소괄호()를 이용해 원하는 위치를 묶어주면, 해당 위치에 matching되는 문자열을 따로 뽑아주는것을 확인 할 수 있습니다.

> str_match(fruits_names, 'name=([:alpha:]*_[:digit:]+)')
     [,1]             [,2]       
[1,] "name=apple_01"  "apple_01" 
[2,] "name=orange_01" "orange_01"
[3,] "name=orange_2"  "orange_2" 

추가로 소괄호를 더 넣어주어서 다음과 같이 여러 문자열을 동시에 뽑을 수 있습니다. 

 

> str_match(fruits_names, 'name=(([:alpha:]*)_([:digit:]+))')
     [,1]             [,2]        [,3]     [,4]
[1,] "name=apple_01"  "apple_01"  "apple"  "01"
[2,] "name=orange_01" "orange_01" "orange" "01"
[3,] "name=orange_2"  "orange_2"  "orange" "2" 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함