텍스트 사전 처리 : 온라인 텍스트 정리 (즉, 트윗, 댓글, 블로그)

  1. 공백
  2. 구두점
  3. 숫자
  4. 불용어
  5. 영어 이외의 텍스트 (ASCII) https://en.wikipedia.org/wiki/UTF-8
  6. URLs

여분의 공백이 있는 문자열의 벡터를 생각해봅시다.

“stringr’ 패키지 II 지난 시간에 다룬 _stringr_패키지 함수에 대해서 생각해봅시다.

함수 설명 유사한 기본 함수
str_length() 문자의 수 nchar()
str_split() 문자열 분리 strsplit()
str_c() 문자열 연결 paste()
str_detect() 문자열의 패턴 유무 인식 none
str_view_all() 매칭된 문자열 모두를 보여줌 none

stringr 패키지에 있는 모든 함수는 "str_"로 시작하고 뒤에는 수행 작업과 관련된 용어가 따라옵니다.

패턴 매칭을 위한 유용한 stringr 함수

대부분의 문자열 함수는 특정 패턴의 텍스트를 설명하기 위해 간결한 언어인 정규 표현식과 함께 쓰입니다.

다음은 텍스트 사전처리에 유용한 함수들입니다. :

함수 정의
str_trim() 선/후행 공백을 제거합니다.
str_detect() 문자열 벡터의 패턴 존재 유무(T/F)를 감지하여 반환합니다.
str_which() 문자열 벡터에서 일치하는 패턴의 모든 위치를 반환합니다.
str_subset() 문자열 벡터에서 일치하는 패턴을 포함하는 모든 원소를 반환합니다.
str_trunc() 문자열을 자릅니다.
str_locate() 문자열에서 일치하는 패턴의 첫 번째 위치를 찾습니다.
str_locate_all() 문자열에서 일치하는 패턴의 모든 위치를 찾습니다.
str_extact() 문자열에서 처음으로 일치하는 패턴을 추출합니다.
str_extact_all() 문자열에서 일치하는 모든 패턴을 추출합니다.
str_replace() 문자열에서 처음으로 일치하는 패턴을 바꿉니다.
str_replace_all() 문자열에서 일치한느 모든 패턴을 바꿉니다.

텍스트 전처리

library(pdftools)
library(stringr)
bts_text <- pdf_text("BTS_(band).pdf")
bts_text_sent <- strsplit(unlist(bts_text), split="\\. ")
unlist(bts_text_sent)[c(1,4)]
## [1] "BTS (band)\nBTS, also known as the Bangtan Boys, is a seven-member South\n                                                                                                   BTS\nKorean boy band formed by Big Hit Entertainment"                          
## [2] "The band continued to rise\nto widespread prominence with their subsequent albums Dark & Wild\n(2014), The Most Beautiful Moment in Life, Part 2 (2015) and The\nMost Beautiful Moment in Life: Young Forever (2016), with the latter\ntwo entering the U.S"
bts_sent_trim <- str_replace_all(unlist(bts_text_sent), " +", " ")
bts_sent_trim <- unlist(bts_sent_trim)
unlist(bts_sent_trim)[c(1,4)]
## [1] "BTS (band)\nBTS, also known as the Bangtan Boys, is a seven-member South\n BTS\nKorean boy band formed by Big Hit Entertainment"                                                                                                                            
## [2] "The band continued to rise\nto widespread prominence with their subsequent albums Dark & Wild\n(2014), The Most Beautiful Moment in Life, Part 2 (2015) and The\nMost Beautiful Moment in Life: Young Forever (2016), with the latter\ntwo entering the U.S"
  1. 공백 : 해결!

그러나 구두점과 숫자는 어떻게 되었나요?

  1. 구두점 : 어떤 구두점을 제거해야 할지를 지정할 수 없습니다.

  2. 숫자 : 어떤 숫자를 제거해야 할지를 지정할 수 없습니다.

이 문제를 해결하려면, 다음 단계로 넘어 가야합니다.

정규 표현식

지금까지 R에서 텍스트를 다루고 작업하기 위한 몇가지 기본 기능을 학습하였습니다. 그러나 이 과정에서 우리는 문자열을 자유롭게 다룰 수 있어햐 합니다. 그래서 우리는 regular _expressions_에 대해 학습할 것입니다.

정규 표현식이란 무엇일까요?

정규 표현식이라는 이름은 별로 말하여지지 않습니다. 그러나 정규 표현식은 모두 텍스트에 관한 것입니다. 우리는 현대 디지털 세계에서 이메일, 문자 메세지, 뉴스 기사, 블로그, 댓글, 트윗과 같은 텍스트가 얼마나 많은지 알 수 있습니다. 이 것들이 텍스트입니다. 정규식은 텍스트 패턴을 설명하여 이러한 텍스트 데이터로 작업할 수 있게 해주는 도구입니다.

regular expression은 특정 텍스트의 pattern을 설명하기 위한 특수 문자열입니다. 즉, 정규식은 a set of strings을 설명하는 기호 집합입니다. 용어때문에 정규 표현식은 다소 길지만 대부분의 사람들은 regex라고 짧게 줄여서 이야기합니다.

정규표현식이 아닌 것에 주목할 필요가 있습니다. 그것들은 프로그래밍 언어가 아닙니다. 프로그래밍 언어처럼 보일지도 모르지만요. 왜냐하면 그것들은 컴퓨터가 우리에게 원하는 것을 할 수 있게 해주는 정의된 규칙 집합을 가진 공식 언어이기 때문입니다. 그러나 정규 표현식에는 변수가 없으므로 2+2를 추가하는 것과 같은 계산할 수 있습니다.

정규 표현식(RegEx)은 어디에 사용될까요?

우리는 정규 표현식을 사용하여 텍스트 작업을 할 것입니다. regex를 사용하여 문서에서 “center”라는 단어를 검색할 수 있습니다. “center”는 center 또는 centre로 표기됩니다. 문서를 검색하고 문서에서 나온 “Korea, South”, “Republic of Korea”, “R.O.K”를 “South Korea”로 바꿀 수 있습니다. wordcloud에서 가졌던 2번째, 3번째 문제를 생각해봅시다. 위키피디아의 문서에서는 우리가 wordcloud에서 제거하고 싶어한 많은 구두점과 숫자가 포함되어 있습니다. 그렇다면 어떻게 문서에서 발견하고 추출할 수 있을까요?

사실, 우리는 이미 regex를 통해 단어를 발견하고 단어가 벡터에 있는 위치를 찾는데에 사용하였습니다. 이렇게 하기 위해, 텍스트 패턴을 “references”로 설정하였습니다. 마찬가지로, 문서에서 “2017”이라는 숫자를 찾아내고 추출하고자 한다면, which(str_detect(bts_text_word_main, "2017"))라고 코딩하여 그렇게 할 수 있습니다.

그러나, 텍스트 패턴은 매우 복잡하여서 일반화 할 수 없습니다. 문서에 “2018”, “2016”, “2017”이 포함될 수 있으므로 한번에 모든 숫자를 함께 삭제해주어야 합니다. 텍스트 크기가 커지면 제거할 숫자를 모두 지정할 수 없기 때문입니다. 그러나 정규 표현식을 사용하여 텍스트에서 찾고 있는 것을 설명할 수 있습니다. 위키피디아 문서의 경우, 우리가 찾고 있는 것을 지정하지 않고도 임의의 숫자 또는 구두점을 찾아서 추출할 수 있습니다. 일단 정규식의 패턴을 정의하면, RStudio에서 일치한 결과를 반환해줍니다.

정규식에 들어가기 전에…

정규 표현식은 처음에는 이해하기 어려울 수 있습니다. 무의미한 방식으로 결합된 문자, 숫자 및 구두점이 포함된 문자열을 볼 수 있기 때문입니다. 프로그래밍 및 데이터 분석과 마찬가지로, 정규 표현식을 학습하고 정규 표현식 패턴을 정의하는 데에 시간이 걸리므로 많은 연습이 필요합니다. 그러나 연습을 많이하면 할수록 더 복잡한 패턴을 정의할 수 있고 제거할 수도 있습니다. 그리고 정규 표현식은 Python, Perl, Java와 같은 다른 프로그래밍 언어의 대부분에서 지원됩니다.

정규식의 기본

정규 표현식을 사용하는 목적은 텍스트 문자열과 일치하는 특정 패턴을 설명하기 위함입니다. 다시 말하자면, regex로 작업하는 것은 pattern matching에 관한 것입니다. 매칭 결과가 성공 또는 실패 할 수도 있습니다. 따라서, 검색할 텍스트 패턴을 지정하면 RStudio는 패턴과 일치하는 문자(또는 문자열)를 반환합니다. 위에서 언급했듯이 패턴 일치의 가장 간단한 방법은 문자열의 특정 문자가 있는 항목을 검색하는 것입니다. 예를 들어, 우리는 위키피디아 페이지의 텍스트 문서에서 “references”라는 단어를 검색했습니다. 그러나 복잡한 구조의 정규식 패턴을 만들어야 했었죠. 예를 들어, 해시 태그 # 또는 “ing”로 끝나는 모든 단어와 일치시키려면 어떻게 해야할까요? 그러한 경우, 우리는 정규식을 동일한 형태의 산술식으로 구성합니다.

리터럴 문자의 일치

가장 단순한 일치로 시작해봅시다. : 문자 그대로의 문자 리터럴 문자 일치는 문자 “A”와 같은 주어진 문자가 문자 “A”와 일치한다는 것입니다. 이 것은 그 자체로 일치하기 때문에 literal이라고 불리웁니다. 이 유형의 일치는 가장 기본적인 유형의 정규식 연산입니다. 일반 텍스트와 따옴표만 일치시킵니다.

다음은 정규식에 대한 기본적인 이해의 예입니다.

우리가 다루는 첫번째 정규식은 "the"입니다. 이 패턴은 문자 “t”, 문자 “h”, 문자 “e로 구성됩니다. 그러나 이 패턴은 단어”the“뿐만 아니라 단어”they“와”soothe“와도 일치합니다. 따라서 정규 표현식 패턴은 ’공백’으로 시작하고 끝나야 합니다. :” the "

문자열 객체인 bts_sent_trim을 생각해 봅시다.

문자열 객체와 일치하는 실제 패턴을 시각적으로 나타내려면 stringr패키지에서 str_view() 함수를 사용해야 합니다.

bts_sent_trim[1:5]
## [1] "BTS (band)\nBTS, also known as the Bangtan Boys, is a seven-member South\n BTS\nKorean boy band formed by Big Hit Entertainment"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
## [2] "They debuted on\nJune 12, 2013 with the song \"No More Dream\" from their first album\n2 Cool 4 Skool"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
## [3] "They won several New Artist of the Year awards for\nthe track, including at the 2013 Melon Music Awards and Golden Disc\nAwards and the 2014 Seoul Music Awards"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
## [4] "The band continued to rise\nto widespread prominence with their subsequent albums Dark & Wild\n(2014), The Most Beautiful Moment in Life, Part 2 (2015) and The\nMost Beautiful Moment in Life: Young Forever (2016), with the latter\ntwo entering the U.S"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
## [5] "Billboard 200.[3] The Most Beautiful Moment in\n BTS at the 32nd Golden Disk Awards on\nLife: Young Forever went on to win the Album of the Year award at\n January 10, 2018\nthe 2016 Melon Music Awards.[4]\n From left to right: V, Suga, Jin, Jungkook, RM,\nTheir second full album, Wings (2016),[5] peaked at number 26 on the Jimin, and J-Hope\nBillboard 200, which marked the highest chart ranking for a K-pop Background information\nalbum ever.[6] In their native South Korea, Wings became the best\n Also known as Bangtan Boys · Bulletproof\nselling album in the Gaon Album Chart history at the time.[7] The\n Boy Scouts · Beyond The\nalbum went on to sell more than 1.5 million copies, making it BTS'\n Scene · Bangtan Sonyeondan\nfirst \"million seller\",[8] and the group was subsequently awarded Artist\n Origin Seoul, South Korea\nof the Year at the 2016 Mnet Asian Music Awards.[9] The group's next\nrelease, Love Yourself: Her (2017),[10] debuted at number seven on the Genres K-pop · hip hop · pop ·\nBillboard 200, marking the highest rank for an Asian artist in electronica · rock[1] · R&B ·\nhistory.[11] The group also managed to debut on the Billboard Hot 100 EDM\nfor the first time with the album's title track, \"DNA\", which entered at Years active 2013–present\nnumber 85 and peaked at number 67.[12] Another track from the Labels Big Hit Entertainment · Pony\nalbum, \"Mic Drop\", was remixed by Steve Aoki with a feature by Canyon · Def Jam Japan[2]\nDesiigner and peaked at number 28 on the Billboard Hot 100"
str_view(bts_sent_trim[1:5], " the ") # 문자열 이름이 먼저 오고 정규식의 지정된 패턴이 뒤따릅니다.

이처럼 간단해 보일지 모르지만 강조해야할 몇 가지 세부 사항이 있습니다. 첫 번째는 정규식 검색이 대소 문자를 구분한다는 것입니다. 패턴 “THE”가 bts_sent_trim에서 일치하지 않는다는 것을 의미합니다..

str_view(bts_sent_trim[1:5], " THE ") # 정규식은 대소 문자를 구별하므로 "THE"와는 아무 것도 일치하지 않습니다.

숫자는 어떨까요? 다행히 모든 자릿수(문자도 마찬가지입니다)는 리터럴 문자로 간주됩니다. 패턴 “2018”을 테스트 해봅시다.

str_view(bts_sent_trim[1:5], "2016") # 모든 숫자는 리터럴 문자입니다.

메타 문자

이제 우리는 metacharacters에 대해서 학습할 것입니다. 가장 기본적인 유형의 정규 표현식은 자신과 일치하는 리터럴 문자입니다. 그러나 모든 문자가 일치하는 것은 아닙니다. 문자 그 자체와 일치하지 않는 문자가 바로 metacharacter입니다. 이런 유형의 문자는 특별한 의미가 있으며 문자 그대로의 문자를 변형할 수 있습니다.

정규식에서 metacharacters에는 15개의 종류가 있습니다.

수업 전반에 걸쳐, 이러한 메타 문자로 실습할 예정입니다. 사실, 정규 표현식에 대해 알아야 할 것은 이 메타 문자가 어떻게 작동하는지 입니다. 다행히, 메타 문자가 몇 개밖에 없습니다. 하지만 몇몇 메타 문자에는 하나 이상의 의미를 가진 것도 있습니다. 메타 문자의 의미는 사용하는 맥락, 사용 방법, 사용 장소에 따라 다릅니다. 따라서 이러한 의미를 배우는 데에는 시간이 다소 걸릴 수 있으며 많은 연습이 필요합니다.

와일드 메타 문자

우리가 배울 첫 메타 문자는 wild 메타 문자로 더 잘 알려진 “.”(점)입니다. 이 메타 문자는 새 행을 제외하고 모든 문자를 일치시키는 데에 사용됩니다.

예를 들어, 패턴 "t.e"를 생각해봅시다. 이 패턴은 “the” 뿐만 아니라, “tae”, “tee”, “tie”, “toe” 등과도 일치합니다. 그러나 점이 하나의 단일 문자와만 일치하므로 “thee”, “tree”, 또는 “tube”와는 일치하지 않습니다.

str_view(bts_sent_trim[1:5], "t.e")

와일드 메타 문자는 정규 표현식에서 가장 많이 사용되는 메타 문자 중 하나이지만 많은 실수의 근본이기도 합니다. 예를 들어, "e.g"와 일치하는 정규 표현식을 만들고 싶다고 가정해봅시다. 이 패턴은 “e.g”뿐만 아니라, “eng”, “e g”, “e-g”와도 일치할 수 있습니다.

왜?

왜냐하면 "."은 모든 것과 일치하는 메타 문자이기 때문입니다.

메타 문자 이스케이프

그렇다면 메타 문자 대신 문자 “점”을 일치시킬 수 있을까요? 예를 들어, 다음과 같은 문자 벡터가 있다고 가정해 봅시다. :

dot_words <- c("e.g", "eng", "e g", "e-g")

패턴 "e.g"를 사용하면, dot_words에 있는 모든 요소와 일치합니다.

str_view(dot_words, "e.g")

실제로 문자 “점”과 일치시키려면, 메타 문자를 이스케이프 처리해야 합니다.

대부분의 언어에서 메타 문자를 이스케이프하는 방법은 메타 문자 앞에 백 슬래시 문자를 추가하는 것입니다. 메타 문자 앞에 백 슬래시를 붙이면 문자를 벗어나므로 문자가 더 이상 특별한 의미를 가지지 않으며 문자 자체가 일치하게 됩니다. 그러나 R은 조금 다릅니다. 단일 백슬래시를 넣는 것이 아니라 2개의 백 슬래시를 넣어야 합니다. : "e\\.g". 단일 백 슬래시 "\"가 R에서는 메타 문자로 다른 의미를 가지기 때문입니다.

str_view(dot_words, "e\\.g")

퀴즈

위키피디아 페이지에서 단어 벡터 객체의 점“.”을 포함하는 단어를 매칭하고 일치하는 단어의 개수를 내림차순으로 정렬하세요.

DotWordTable <- ???
write.table(DotWordTable, file="DotWordTable.txt", sep=",", quote = FALSE, row.names = FALSE)

정규 표현식 연습

지금까지 메타 문자와 메타 문자를 피하는 방법에 대해 학습하였습니다. 이제부터는 문자 집합을 정의하는데에 사용되는 메타 문자와 대괄호 []에 대해 자세히 알아보도록 하겠습니다.

문자 집합

문자 집합은 집합 안에 있는 다양한 문자 중 하나와 일치합니다. 즉, 텍스트에서 "[abc]"문자가 문자 “a”, “b”, “c”와 일치합니다. 대괄호 []는 문자 집합을 나타냅니다.

문자 집합 내의 문자 순서는 중요하지 않습니다. 중요한 것은 대괄호 안에 있는 문자의 존재입니다. 따라서 문자 집합 "[abc]"는 텍스트 소문자 “c”, “b”, “a”와 일치합니다. 그리고 "[cba]" 역시 같습니다.

문자 집합의 정의

"f[aeiou]n"와 “fan”, “fin”, “fun”라는 단어가 있는 벡터를 포함하는 정규식 패턴을 생각해봅시다.

library(stringr)
fns <- c("fan","fen","fin","fon","fun")
str_view(fns, "f[aeiou]n")

“f[aeiou]n” 집합은 fns의 모든 원소와 일치합니다. 이제 같은 집합을 다른 벡터 fnx와 함께 사용합니다. :

fnx <- c("fan","fin","fun","f0n","f.n","f1n","fain")
str_view(fnx, "f[aeiou]n")

보다시피 fnx 안에 모음 문자기 있는 처음 세 요소만 일치합니다. 그리고 마지막 요소 “fain”은 일치하지 않습니다. **문자 집합은 “a” 또는 “i” 하나의 문자에만 일치하고 _“ai”_는 일치하지 않습니다.**

문자 범위

위에서 설명한 문자 집합은 일치시키고자 하는 가능한 문자를 지정합니다. 영문자(대문자 또는 소문자) 또는 임의의 숫자와 일치하는 문자를 찾으려면 어떻게 해야할까요?

“문자 범위”를 사용하면 이 문제를 해결할 수 있습니다. 우리는 대시(dash) 메타 문자 "-"를 기반으로 하는 유용한 지름길로 문자의 범위를 지정할 수 있습니다. 문자 범위는 2개의 대시 "-" 기호로 구분된 문자 집합으로 구성됩니다.

그래서 어떤 문자나 숫자가 와도 매치시키려면 다음과 같이 구성된 문자 집합을 정의할 수 있습니다. :

uppercase <- "[A-Z]"

lowercase <- "[a-z]"

number <- "[0-9]"

대시는 문자 집합 안에 있을 때만 메타 문자입니다. 문자 집합 외부에서는 문자 그대로 대시입니다.

그렇다면 어떻게 문자 범위를 사용할까요?

3개의 문자열을 가진 다음 벡터를 보고 특정 유형의 문자가 여러 번 나오는 경우를 살펴봅시다.

triplets <- c("bts","the","BTS","The","010","070",":-)","^^;")
str_view(triplets, "[a-z][a-z][a-z]") # 3개의 연속된 소문자 
str_view(triplets, "[A-Z][A-Z][A-Z]") # 3개의 연속된 대문자 
str_view(triplets, "[A-Z][a-z][a-z]") # 대문자를 먼저 쓰고 그 다음 소문자 2개 
str_view(triplets, "[0-9][0-9][0-9]") # 3자리 연속된 숫자

":-)""^^;" 요소는 지금까지 보아온 문자 범위 중 어느 것과도 일치하지 않는다는 것에 주의하세요.

부정 문자 집합

정규 표현식으로 작업할 때, 특정 집합의 일부가 아닌 문자를 일치시키는 빈번한 상황이 발생합니다. 예를 들어, 알파벳의 일부가 아닌 문자를 매치할 수 있습니다. 이 유형의 일치는 부정 문자 집합을 사용하여 집합에 없는 문자 하나와 일치시킬 수 있습니다. 이 집합을 정의하기 위해 메타 문자 캐럿 "^"을 사용합니다.

캐럿 "^"은 정규 표현식의 패턴에 다라 하나 이상의 의미를 가지는 메타 문자 중 하나입니다. 문자 집합 안의 첫번째 위치에 캐럿을 사용하면 : 예 : "[^a-z]", 소문자 중 하나가 아님을 나타내는 부정을 의미합니다. 따라서 소문자를 제외한 모든 문자와 일치합니다.

그래서 우리는 음의 문자 범위 "[^a-zA-Z0-9][^a-zA-Z0-9][^a-zA-Z0-9]" 를 정의함으로써 문자와 숫자가 아닌 원소 ":-)""^^;"를 매치할 수 있습니다.

str_view(triplets, "[^a-zA-Z0-9][^a-zA-Z0-9][^a-zA-Z0-9]") # 세 자릿수의 문자 및 숫자 부정 

캐럿은 문자 집합 안에 처음으로 오는 경우에만 부정을 의미하며, 그렇지 않으면 집합은 부정적 집합이 아닙니다. :

str_view(triplets, "[a-zA-Z0-9^][a-zA-Z0-9^][a-zA-Z0-9^]") # 연속된 3자리 문자/숫자/캐럿 

이 경우, 패턴 "[a-zA-Z0-9^]"은 부정 집합 "[^a-zA-Z0-9]"과 완전히 다른 “문자 또는 숫자 또는 캐럿 문자”를 의미합니다.

triplets의 마지막 요소에서 리터럴 문자 ^를 어떻게 일치시킬 수 있을까요? 이중 백 슬래시를 사용하세요!

캐럿을 제외한 다른 문자와 일치시키려면 2개의 캐럿이 있는 문자 집합 "[^^]"을 사용해야 합니다. 첫 번째 캐럿은 부정 연산자로 작동하고 두 번째 캐럿은 캐럿 문자 자체입니다.:

str_view(triplets, "\\^\\^;")
str_view(triplets, "[^^][^^][^^]") # 연속된 3개의 캐럿 부정 

문자 집합 안의 메타 문자

문자 집합이 무엇인지, 문자 범위를 정의하는 방법 및 부정 문자 집합을 지정하는 방법에 대해 알아보았습니다. 이제 문자 집합 안에 메타 문자를 포함시킬 때 어떤 일이 일어나는지 이야기 해봅시다. 첫 번째 위치에 있는 캐럿을 제외하고, 문자 집합 내의 다른 메타 문자는 이미 나와져 있습니다! 즉, 문자 집합 안에 이중 백 슬래시를 사용하여 이스케이프 처리할 필요가 없습니다.

예를 들어, fnx에 의해 형성된 문자 집합을 가진 정규식은 점“.” 문자를 포함합니다. 점 문자는 일반적으로 모든 문자 유형과 일치하는 메타 문자라는 점을 기억하세요. 그러나 점 문자가 문자 집합 안에 있으면 메타 문자로서의 기능을 상실합니다. 따라서 문자 집합은 “f”와 “n” 문자 사이의 문자 “a”, “i”, “u”, 및 리터럴 점 문자 “.”와 일치합니다.

str_view(fnx, "f[.aiu]n") # 3개의 연속된 문자 "a"/"i"/"u" 또는 리터럴 도트 문자 

하지만 모든 메타 문자가 문자 잡합 안에 있을 때 문자가 되는 것은 아닙니다. 몇 가지 예외가 있습니다. ], -, \, ^

닫힌 대괄호 ]는 문자 집합을 묶는 데 사용합니다. 따라서, 문자 집합 안에 문자 닫는 괄호를 사용하려면 2개의 백 슬래시 "[aiu\\]]"를 사용하여 이스케이프해야합니다..

이미 보았듯이, - 문자는 문자 집합 안에 문자의 범위를 정의하는데 사용됩니다. 즉, [a-d][0-5]입니다. 같은 방법으로 문자 집합 안의 문자 대시와 일치시킬 수 있습니다. : "[a\\-z]"

백 슬래시는 매우 복잡합니다. 1개의 백 슬래시를 리터럴 문자와 일치시키려면 4개의 백 슬래시를 넣어야 합니다. 왤까요?

R은 ‘'가 백 슬래시 문자 (\n\t)를 만들 수 있는 구분 기호가 아니라 리터럴 백 슬래시 문자임을 알리고, 백 슬래시’'를 앞에 두고 이중 백 슬래시를 사용하여 이스케이프 처리 합니다.

slash <- c("fan","f.n","f\\n") # 리터럴 문자로 단일 백 슬래시는 이중 백 슬래시로 표현됩니다. 
str_view(slash, "f[a.\\\\]n") # 리터럴 문자로 단일 백 슬래시는 이중 백 슬래시로 표시되며 첫 번째로 2개의 백 슬래시를 넣음으로써 이스케이프 처리할 수 있습니다.