close_btn
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

수량자는 앞서 말씀드렸던 메타문자와 함께 쓰여서 이것이 반복되는 것을 표현할 때 사용합니다.
예를들어 생년월일은 숫자6자리 이지요 "\d{6}" 이라고 쓰면 6자리가 표현됩니다. 주민등록번호는 "\d{6}-[12]\d{6}" 라고 하면 됩니다. 이것에 관한 설명은 이후 정규표현식 활용 시간에 자세히 알아보지요 !

수량자

의미

+

1회 이상 직전 패턴을 연속해서 만족

*

0회 혹은 1회 이상 직전 패턴 연속해서 만족

{3}

직전 패턴 3회 연속해서 만족

{1,3}

직전 패턴 1~3회 연속해서 만족

? (optional)

직전 패턴 0회 혹은 1회

? (lazy)

해당문자열에서 직전 패턴을 만족하는 match 중 최소 길이만큼

 

 

##############################################

txt <- "abcd 012345 +-.,!@# ABCD 가나다라"
ge<-gregexpr("\\w+",txt,perl=TRUE)
ge
r_index<-ge[[1]]
r_long<-attr(r_index,"match.length")
substr(txt,r_index[1],r_index[1]+r_long[1]-1)
substr(txt,r_index[2],r_index[2]+r_long[2]-1)
substr(txt,r_index[3],r_index[3]+r_long[3]-1)
ge<-gregexpr("\\w*",txt,perl=TRUE)
ge
r_index<-ge[[1]]
r_long<-attr(r_index,"match.length")
substr(txt,r_index[1],r_index[1]+r_long[1]-1)
substr(txt,r_index[2],r_index[2]+r_long[2]-1)
substr(txt,r_index[3],r_index[3]+r_long[3]-1)

 

> txt <- "abcd 012345 +-.,!@# ABCD 가나다라"
> ge<-gregexpr("\\w+",txt,perl=TRUE)
> ge
[[1]]
[1] 1 6 21
attr(,"match.length")
[1] 4 6 4> r_index<-ge[[1]]
> r_long<-attr(r_index,"match.length")
> substr(txt,r_index[1],r_index[1]+r_long[1]-1)
[1] "abcd"
> substr(txt,r_index[2],r_index[2]+r_long[2]-1)
[1] "012345"
> substr(txt,r_index[3],r_index[3]+r_long[3]-1)
[1] "ABCD"

수량자 "+"는 바로앞에 나온 패턴이 1번 또는 그 이상 연속되는 것을 나타냅니다.

txt <- "abcd 012345 +-.,!@# ABCD 가나다라"
ge<-gregexpr("\\w+",txt,perl=TRUE)
ge

을 통해 "abcd 012345 +-.,!@# ABCD 가나다라" 내에서
정규표현식을 만족하는 첫번째 글자 위치와 만족하는 길이를 알아내었습니다.

> ge
[[1]]
[1] 1 6 21
attr(,"match.length")
[1] 4 6 4

모두 세군대에서 길이 4, 6, 4만큼 만족하고 있네요. "\w"는 영문자, 숫자, 언더바라고 말씀드렸지요 ! abcd까지 4번연속 만족하다가 공백에서 \w를 만족하지 않으므로 첫번째 위치부터 길이 4만큼 패턴이 만족합니다. 공백이후 012345가 다시 \w를 연속해서 6번 만족하며 또 한번 공백이후 특수문자를 지나쳐 ABCE가 또한 번 \w를 연속해서 4만큼 만족합니다. match 패턴의 길이는 attribute로 저장되어 있지요.

> ge
[[1]]
[1] 1 6 21
attr(,"match.length")
[1] 4 6 4

이를 출력하기 위해

> r_index<-ge[[1]]
> r_long<-attr(r_index,"match.length")
> substr(txt,r_index[1],r_index[1]+r_long[1]-1)
[1] "abcd"

를 통해 ge list에서 패턴이 일치한 곳의 첫번째 위치를 담고있는 vector 인 ge[[1]]을 r_index로 저장하고 각각 match된 패턴의 길이를 attr함수로 가져와서 r_long에 저장합니다. substr 함수가 문자열의 특정 위치에 있는 문자들을 반환하므로 시작점 끝점을 r_index와 r_long을 이용하여 설정해 주면 "abcd"로 원하였던 결과를 얻을 수 있습니다.

substr(txt,r_index[2],r_index[2]+r_long[2]-1)
substr(txt,r_index[3],r_index[3]+r_long[3]-1)

이 둘을 통해 공백 이후의 각각 match되는 패턴들도 찾을 수 있습니다.

ge<-gregexpr("\\w*",txt,perl=TRUE)> r_index<-ge[[1]]
> r_long<-attr(r_index,"match.length")
> substr(txt,r_index[1],r_index[1]+r_long[1]-1)
[1] "abcd"
> substr(txt,r_index[2],r_index[2]+r_long[2]-1)
[1] ""
> substr(txt,r_index[3],r_index[3]+r_long[3]-1)
[1] "012345

수량자 "*"은 바로직전 패턴이 0번 출현하거나 여러번 출현한 경우를 matching 합니다.

abcd는 \w가 연속 4번나왔으므로 첫번째 match가 되고 공백은 \w가 0번 출현한 것이므로 길이0인 두번째 match가 됩니다. 012345는 길이 6인 세번째 match가 됩니다.

 

 

 

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 초급 R 강의 게시판 이용 관련 공지사항 1 DataMarket 2014.05.21 511930
50 초급 [BigData - R강의 초급] 정규표현식 regular expression 4강 (1) – Anchors "^", "$" 2 DataMarket2 2014.05.23 101688
49 초급 [BigData - R강의 초급] 정규표현식 regular expression 3강 – alternation "|" DataMarket2 2014.05.23 96710
48 초급 [BigData - R강의 초급] 정규표현식 regular expression 2강(4) – 게으른 수량자 "+?", "*?", "{n,}?" 1 DataMarket2 2014.05.23 110279
47 초급 [BigData - R강의 초급] 정규표현식 regular expression 2강(3) – 수량자 "?" 1 DataMarket2 2014.05.23 109660
46 초급 [BigData - R강의 초급] 정규표현식 regular expression 2강(2) – 수량자 {} 1 DataMarket2 2014.05.23 104353
» 초급 [BigData - R강의 초급] 정규표현식 regular expression 2강(1) – 수량자 “+”, “*” DataMarket2 2014.05.23 107129
44 초급 [BigData - R강의 초급] 정규표현식 regular expression 1강(4) – 문자열 형태표현 ".", "\W", "\D", "\S" DataMarket2 2014.05.23 94867
43 초급 [BigData - R강의 초급] 정규표현식 regular expression 1강(3) – 문자열 형태표현 "\p{Hangul}"(한글), 특수문자 2 DataMarket2 2014.05.23 102202
42 초급 [BigData - R강의 초급] 정규표현식 regular expression 1강(2) – 문자열 형태표현 “\d”, “\s” DataMarket2 2014.05.23 93640
41 초급 [BigData - R강의 초급] 정규표현식 regular expression 1강(1) – 문자열 형태표현 ".", "\w" 3 DataMarket2 2014.05.23 113699
40 초급 [BigData - R강의 초급] 따옴표를 문자열로 인식시키려면? - escaper \ DataMarket2 2014.05.23 69634
39 초급 [BigData - R강의 초급] 문자열 패턴 regular expression 연습 DataMarket2 2014.05.23 70284
38 초급 [BigData - R강의 초급] 문자열 검색 – grep, regexpr, gregexpr DataMarket2 2014.05.23 100683
37 초급 [BigData - R강의 초급] 문자열 찾아바꾸기 – sub, gsub 1 DataMarket2 2014.05.23 90896
36 초급 [BigData - R강의 초급] 문자열 나누기 – strsplit, str_split DataMarket2 2014.05.23 105946
35 초급 [BigData - R강의 초급] 문자열 일부 추출 – substr(), str_sub() 비교 2 DataMarket2 2014.05.23 102217
34 초급 [BigData - R강의 초급] 문자열 포멧 출력 – sprintf 함수 1 DataMarket2 2014.05.23 59769
33 초급 [BigData - R강의 초급] 문자열 길이 – nchar 함수 1 DataMarket2 2014.05.23 57839
32 초급 [BigData - R강의 초급] 문자열 이어붙이기 - paste, paste0 함수 1 DataMarket2 2014.05.23 69636
31 초급 [BigData - R강의 초급] 결측치 처리 함수 - complete.cases DataMarket2 2014.05.23 50921
Board Pagination ‹ Prev 1 2 ... 3 Next ›
/ 3

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5