close_btn
조회 수 109658 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

아래 표 중 수량자 ?는 직전 패턴이 0회 혹은 1회 출현하는 경우를 나타냅니다. 이는 전화번호 예제를 통해 익혀보지요 !

수량자

의미

+

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

*

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

{3}

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

{1,3}

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

? (optional)

직전 패턴 0회 혹은 1회

? (lazy)

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

 

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

txt<- "01092701209 010-9270-1209 75615454512 831211-1754856"
ge<-gregexpr("0\\d{2}-?\\d{3,4}-?\\d{4}",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<- "01092701209 010-9270-1209 75615454512 831211-1754856"

위는 "01092701209 010-9270-1209 75615454512 831211-1754856"로 첫번째 두번째 전화번호와 세번째 무의미한 번호 조합 네번째 주민등록번호로 이루어져 있습니다. 이중에 전화번호만 추출하고 싶습니다 !

 

> ge<-gregexpr("0\\d{2}-?\\d{3,4}-?\\d{4}",txt,perl=TRUE)

전화번호는 첫자리수가 0으로 시작하고 맨앞번호가 3자리 그다음 3자리혹은4자리 마지막 4자리로 이루어져있습니다.
그런데 이것이 "-"으로 연결되어 있을 수도 있고 아닐 수도 있습니다. 바로 여기에 "?"가 사용됩니다.

0\\d{2}로 앞의 3자리를 표현합니다. 숫자 0에 이어서 숫자가 연속해서 2개가 나온다 라는 말이지요.

-?을 이용해서 "-"가 들어가도 되고 안들어가도 된다는 것을 표현합니다.

\\d{3,4}로 중간자리수가 세자리 혹은 네자리 임을 표현하구요

-?을 이용하여 다시 "-"가 들어올 수 있음을 표현합니다.

\\d{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] "01092701209"
> substr(txt,r_index[2],r_index[2]+r_long[2]-1)
[1] "010-9270-1209"
> substr(txt,r_index[3],r_index[3]+r_long[3]-1)
[1] NA

그 결과 위와 같이 전화번호만 뽑히게 됩니다 !

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 초급 R 강의 게시판 이용 관련 공지사항 1 DataMarket 2014.05.21 511919
50 초급 [BigData - R강의 초급] 정규표현식 regular expression 4강 (1) – Anchors "^", "$" 2 DataMarket2 2014.05.23 101685
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 110278
» 초급 [BigData - R강의 초급] 정규표현식 regular expression 2강(3) – 수량자 "?" 1 DataMarket2 2014.05.23 109658
46 초급 [BigData - R강의 초급] 정규표현식 regular expression 2강(2) – 수량자 {} 1 DataMarket2 2014.05.23 104352
45 초급 [BigData - R강의 초급] 정규표현식 regular expression 2강(1) – 수량자 “+”, “*” DataMarket2 2014.05.23 107126
44 초급 [BigData - R강의 초급] 정규표현식 regular expression 1강(4) – 문자열 형태표현 ".", "\W", "\D", "\S" DataMarket2 2014.05.23 94866
43 초급 [BigData - R강의 초급] 정규표현식 regular expression 1강(3) – 문자열 형태표현 "\p{Hangul}"(한글), 특수문자 2 DataMarket2 2014.05.23 102200
42 초급 [BigData - R강의 초급] 정규표현식 regular expression 1강(2) – 문자열 형태표현 “\d”, “\s” DataMarket2 2014.05.23 93639
41 초급 [BigData - R강의 초급] 정규표현식 regular expression 1강(1) – 문자열 형태표현 ".", "\w" 3 DataMarket2 2014.05.23 113698
40 초급 [BigData - R강의 초급] 따옴표를 문자열로 인식시키려면? - escaper \ DataMarket2 2014.05.23 69633
39 초급 [BigData - R강의 초급] 문자열 패턴 regular expression 연습 DataMarket2 2014.05.23 70283
38 초급 [BigData - R강의 초급] 문자열 검색 – grep, regexpr, gregexpr DataMarket2 2014.05.23 100683
37 초급 [BigData - R강의 초급] 문자열 찾아바꾸기 – sub, gsub 1 DataMarket2 2014.05.23 90894
36 초급 [BigData - R강의 초급] 문자열 나누기 – strsplit, str_split DataMarket2 2014.05.23 105945
35 초급 [BigData - R강의 초급] 문자열 일부 추출 – substr(), str_sub() 비교 2 DataMarket2 2014.05.23 102215
34 초급 [BigData - R강의 초급] 문자열 포멧 출력 – sprintf 함수 1 DataMarket2 2014.05.23 59766
33 초급 [BigData - R강의 초급] 문자열 길이 – nchar 함수 1 DataMarket2 2014.05.23 57838
32 초급 [BigData - R강의 초급] 문자열 이어붙이기 - paste, paste0 함수 1 DataMarket2 2014.05.23 69632
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