오늘은 R 정규표현식 문자 분석하는 방법에 대해 알아보겠습니다. 문자 파싱은 여러 다양한 형태를 요구하기 때문에 정규식을 제대로 이해하고 사용할 줄 알아야 텍스트 마이닝에서 좋은 데이타를 얻을 수 있습니다.
쉼표 등 특수 문자에 대한 정규표현식은 여기 링크를 참고바랍니다.
목차
Toggle문자 or 숫자 하나
- [:alnum:] → alpha + number
str_split(
string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
pattern = "[:alnum:]"
)
#Output
[[1]]
[1] "" "" "" "" "" "" ""
[8] "" "" "" "" "" ",.!@#$%^&*()/?" ""
[15] "" "<>~+" "" "" ""
- 특정 문자 포함한 문자 or 숫자
str_split(
string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
pattern = "C[:alnum:]"
)
[[1]]
[1] "가나다abcAB" "23,.!@#$%^&*()/?456<>~+789"
- [:punct:] 구두점이 포함된 문자열 → , . ! @ # & * ( ) / ?
str_split(
string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
pattern = "[:punct:]"
)
# Output
[[1]]
[1] "가나다abcABC123" "" "" "" "" "$" "^"
[8] "" "" "" "" "" "456<>~+789"
str_view_all(
string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
pattern = "[:punct:]"
)
#Output
[1] │ 가나다abcABC123<,><.><!><@><#>$<%>^<&><*><(><)></><?>456<>~+789
- [graph:] 구두점, 문자, 숫자가 포함된 문자열(공백문자는 미포함됨)
str_view_all(
string = c("가나다abcA BC123,.!@#$%^&*()/?456<>~+789"),
pattern = "[:graph:]"
)
# Output
[1] │ <가><나><다><a><b><c><A> <B><C><1><2><3><,><.><!><@><#><$><%><^><&><*><(><)></><?><4><5><6><<><>><~><+><7><8><9>
- \\b : 문자열 내에서 특정 단어와 정확하게 일치하는 문자
str_view_all(
string = c("가나다", "나다", "나다라", "가나다라마"),
pattern = "\\\\b나다\\\\b"
)
# Output
[1] │ 가나다
[2] │ <나다>
[3] │ 나다라
[4] │ 가나다라마
[ ] 대괄호
- [ ] 는 집합이나 범위를 표시합니다.
str_split(
string = c("가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"),
pattern = "[나b2#]"
)
[[1]]
[1] "가" "다\\na" "c\\tABC\\n1" "3\\t,.!@" "$ %^&*()/ ?456<>~+789"
str_split(
string = c("가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"),
pattern = "[a-c | A-B]"
)
[[1]]
[1] "가나다\\n" "" "" "\\t" "" "C\\n123\\t,.!@#$" ""
[8] "%^&*()/" "?456<>~+789"
^ 제외 조건(대괄호 내)
- ^ 기호는 대괄호 안에서 해당 문자열들을 제외함.
str_view_all(
string = c("가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"),
pattern = "[^나다abC3]"
)
# Output
[1] │ <가>나다<
│ >ab<c><{\\t}><A><B>C<
│ ><1><2>3<{\\t}><,><.><!><@><#><$>< >< ><%><^><&><*><(><)></>< ><?><4><5><6><<><>><~><+><7><8><9>
묶음 ( )
- 문자열들을 개별이 아닌 하나로 취급함.
str_split(
string = c("가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"),
pattern = "(abc)"
)
# Output
[[1]][1] "가나다\\n" "\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"
^ 문자열의 시작점
- 대괄호 없이 사용하면 문자열의 시작점을 의미함.
str_split(
string = c("가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"),
pattern = "^가"
)
#Output
[[1]][1] "" "나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"
str_split(
string = c("가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"),
pattern = "^나"
)
#Output
[[1]]
[1] "가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"
$ 문자열의 종료점
- 대괄호 없이 $는 문자열의 종료점을 의미함.
str_split(
string = c("가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"),
pattern = "9$"
)
# Output
[[1]]
[1] "가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+78" ""
str_split(
string = c("가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"),
pattern = "9$"
)
# Output
[[1]]
[1] "가나다\\nabc\\tABC\\n123\\t,.!@#$ %^&*()/ ?456<>~+789"
- ^, $ 혼합하여 사용시
str_view_all(
string = c("가나다", "나다", "나다라", "가나다라마"),
pattern = "^나다라$"
)
# Output
[1] │ 가나다
[2] │ 나다
[3] │ <나다라>
[4] │ 가나다라마
연속되거나 비연속 문자열
- (?=) 연속되는 문자열
# 뒤에 “a”가 있는 “가나다”
str_view_all(
string = c("가나다abc가나다def"),
pattern = "가나다(?=a)"
)
# Output
[1] │ <가나다>abc가나다def
# 뒤에 "a"가 없는 "가나다"
str_view_all(
string = c("가나다abc가나다def"),
pattern = "가나다(?!a)"
)
# Output
[1] │ 가나다abc<가나다>def
- (?!=) 이어지지 않는 문자열
# 뒤에 "b"로 이어지지 않는 "가나다"
str_view_all(
string = c("가나다abc가나다def"),
pattern = "가나다(?!=b)"
)
# Output
[1] │ <가나다>abc<가나다>def
- (?<=) 앞에서 이어지는 문자열
# 앞에 "c"가 있는 "가나다"
str_view_all(
string = c("가나다abc가나다def"),
pattern = "(?<=c)가나다"
)
# Output
[1] │ 가나다abc<가나다>def
- (?<!) 앞에서 이어지지 않는 문자열
# 앞에 "c"가 없는 "가나다"
str_view_all(
string = c("가나다abc가나다def"),
pattern = "(?<!c)가나다"
)
# Output
[1] │ <가나다>abc가나다def
반복 일치
- {n} 앞 글자가 n개 일치
str_view_all( string = c("가가가나다abc가가나다def"), pattern = "가{3}")
# Output
[1] │ <가가가>나다abc가가나다def
- {n,} 앞 글자가 n개 이상 일치
str_view_all(
string = c("가가가나다abc가가나다def"),
pattern = "가{2,}"
)
# Output
[1] │ <가가가>나다abc<가가>나다def
- 선행 요소가 n~m개 일치 {n,m}
str_view_all(
string = c("가가가나다abc가가나다def가가가가나다ghi"),
pattern = "가{3,4}"
)
# Output
[1] │ <가가가>나다abc가가나다def<가가가가>나다ghi