[R] 정규표현식 관련

반응형

정규표현식(Regular Expressions)

  • 정규표현식은 문자열의 패턴을 간결하게 기술하는 방식입니다.
  • 특히 텍스트 데이터 분석을 할 경우에 문자열들의 패턴 등을 확인하기 위해 종종 쓰이고는 합니다.



\\

  • 이 역슬래쉬(backslash) 문자를 정규표현식에서 자주 볼 수 있습니다.
  • \\ 이후의 문자들은 일반 문자열을 받아들이지 않습니다.
    • \\d: d는 영어단어 d를 의미하는 것이 아닌 숫자를 의미
    • \\s: 공백을 의미
    • 기타 등등..
  • 아래는 예시입니다.
    • str_view_all() 함수는 정규표현식에 매칭되는 결과물을 HTML로 보여주는 함수로 이해하시면 좋을 것 같습니다.
text <- c("가나다abc123,.!@#$%^&*()/?<>~+")

str_view_all(string = text, pattern = "d")

str_view_all(string = text, pattern = "\\d")

  • 반대로 패턴을 의미하는 문자열에 \\를 추가하면 일반 문자열로 받아들입니다.
str_view_all(string = text, pattern = ".")

str_view_all(string = text, pattern = "\\.")



일치하는 문자

임의의 요소 한 개: .

  • 임의의 요소 하나 하나를 의미합니다. (new line은 예외)
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = "."
)

  • 일반 문자열의 앞뒤 임의 요소와 매칭되는 케이스를 보려면 아래와 같습니다.
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = ".다."
)

str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = ".a..."
)

  • .를 일반 문자열로 취급하고자 한다면 \\.로 입력하셔야 합니다.
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = "\\."
)

 

특수 문자를 제외한 문자열 \\w

  • 문자열 한 개
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = "\\w"
)

  • 문자열 세 개
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = "\\w\\w\\w"
)

특수문자 및 숫자까지 제외한 문자열 [:alpha:]

  • 문자열 한 개
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = "[:alpha:]"
)

  • 문자열 세 개
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = "[:alpha:][:alpha:][:alpha:]"
)

영문 소문자 [:lower:], [a-z]

  • 문자열 한 개
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = "[:lower:]"
)

str_view_all(
  string = c("가나다abc123ef,.!@#$%^&*()/?<>~+"),
  pattern = "[a-z]"
)

  • 문자열 세 개
str_view_all(
  string = c("가나다abc123,.!@#$%^&*()/?<>~+"),
  pattern = "[:lower:][:lower:][:lower:]"
)

영문 대문자 [:upper:], [A-Z]

  • 문자열 한 개
str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?<>~+"),
  pattern = "[:upper:]"
)

str_view_all(
  string = c("가나다abcABC123DEF,.!@#$%^&*()/?<>~+"),
  pattern = "[A-Z]"
)

  • 문자열 세 개
str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?<>~+"),
  pattern = "[:upper:][:upper:][:upper:]"
)

숫자 하나 \\d, [:digit:], [0-9]

str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "\\d"
)

str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "[:digit:]"
)

str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "[0-9]"
)

숫자 이외의 요소 \\D, [^0-9]

str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "\\D"
)

str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "[^0-9]"
)

임의의 문자 또는 숫자 하나 [:alnum:]

  • 느낌이 alphaalnumbernum이 섞인 것 같습니다.
str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "[:alnum:]"
)

  • 일반 문자와 임의의 문자 또는 숫자
str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "C[:alnum:]"
)

구두점이 포함된 문자열 [:punct:]

str_view_all(
  string = c("가나다abcABC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "[:punct:]"
)

구두점, 문자, 숫자가 포함된 문자열 (공백문자 미포함) [:graph:]

str_view_all(
  string = c("가나다abcA  BC123,.!@#$%^&*()/?456<>~+789"),
  pattern = "[:graph:]"
)

문자열 내에서 특정 단어와 정확하게 일치하는 문자 \\b

str_view_all(
  string = c("가나다", "나다", "나다라", "가나다라마"),
  pattern = "\\b나다\\b"
)



공백 문자

줄바꿈 \n

str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$%^&*()/?456<>~+789"),
  pattern = "\n"
)

탭 한 번 \t

str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$%^&*()/?456<>~+789"),
  pattern = "\t"
)

스페이스를 포함한 공백문자 포함 \\s, [:space:]

str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "\\s"
)

str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "[:space:]"
)

스페이스를 포함한 공백문자와 탭만 [:blank:]

str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "[:blank:]"
)



대괄호 [ ]

  • [ ]는 집합이나 범위를 표시합니다.
str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "[나b2#]"
)

str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "[a-c | A-B]"
)

대괄호 안에서 제외 조건 ^

  • 대괄호 안에서의 ^ 기호는 해당 문자열들을 제외하는 역할을 합니다.
str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "[^나다abC3]"
)



묶음 ( )

  • 묶음은 소괄호 ( )로 표시하며 괄호안에 있는 문자열들은 하나의 요소로 취급됩니다.
str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "(abc)"
)



문자열의 시작점 ^

  • 위에서 설명드린 대괄호 안에서의 ^ 기호와 차이를 생각하셔야합니다.
  • 대괄호 없이 ^ 기호는 문자열의 시작점을 의미 합니다.
str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "^가"
)



문자열의 종료점 $

  • 대괄호 없이 $ 기호는 문자열의 종료점을 의미 합니다.
str_view_all(
  string = c("가나다\nabc\tABC\n123\t,.!@#$  %^&*()/ ?456<>~+789"),
  pattern = "9$"
)

  • ^, $ 두 개 기호를 사용하여 문자열 전체의 앞과 뒤를 지정할 수 있습니다.
str_view_all(
  string = c("가나다", "나다", "나다라", "가나다라마"),
  pattern = "^나다라$"
)



이어지거나 이어지지 않는 문자열

이어지는 문자열 (?=)

  • 뒤에 “a”가 있는 “가나다”
str_view_all(
  string = c("가나다abc가나다def"),
  pattern = "가나다(?=a)"
)

  • 뒤에 “a”가 없는 “가나다”
str_view_all(
  string = c("가나다abc가나다def"),
  pattern = "가나다(?!a)"
)

이어지지 않는 문자열 (?!=)

  • 뒤에 “b”로 이어지지 않는 “가나다”
str_view_all(
  string = c("가나다abc가나다def"),
  pattern = "가나다(?!=b)"
)

앞에서 이어지는 문자열 (?<=)

  • 앞에 “c”가 있는 “가나다”
str_view_all(
  string = c("가나다abc가나다def"),
  pattern = "(?<=c)가나다"
)

앞에서 이어지 않는 문자열 (?<!)

  • 앞에 “c”가 없는 “가나다”
str_view_all(
  string = c("가나다abc가나다def"),
  pattern = "(?<!c)가나다"
)



반복 일치

선행 요소가 n개 일치 {n}

str_view_all(
  string = c("가가가나다abc가가나다def"),
  pattern = "가{3}"
)

선행 요소가 n개 이상 일치 {n,}

str_view_all(
  string = c("가가가나다abc가가나다def"),
  pattern = "가{2,}"
)

선행 요소가 n~m개 일치 {n,m}

str_view_all(
  string = c("가가가나다abc가가나다def가가가가나다ghi"),
  pattern = "가{3,4}"
)

반응형
TAGS.

Comments