Million Dreams
100만개의 꿈을 꾸는 개발자 지망생
Day11 Do it! 점프 투 파이썬 스터디 노트

Do it! 점프 투 파이썬

박응용

이지스퍼블리싱 2019.06.20

 

1. 공부한 쪽수

290 ~ 308

 

2. 공부 내용 요약

 

정규표현식

- 정규표현식(Regular Expression)은복잡한 문자열을 처리할 때 사용하는 기법으로, 파이썬 고유 문법은 아니며 문자열을 처리하는 모든 곳에서사용한다.

 

정규 표현식의 기초 메타 문자

- 정규 표현식에서 사용하는 메타 문자(meta characters)

Ex) . ^ $ * + ? { } [ ] \ | ( )

 

* 문자 클래스 [ ]

문자 클래스로 만들어진 정규식은 ‘[ ] 사이의 문자들과 매치

- 정규 표현식이 [abc]라면이 표현식의 의미는 ‘a ,b, c 중 한 개의 문자와 매치

- [ ] 안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위(From – To)를 의미

Ex) [a-zA-Z] : 알파벳 모두 // [0-9] : 숫자

- ^라는 메타문자는 반대(not)의의미를 가진다.

Ex) [^0-9] : 문자만( 숫자의반대이므로)

 

* 자주 사용하는 문자 클래스

\d : 숫자와 매치, [0-9]와 동일한 의미

\D : 문자와 매치, [^0-9]와 동일한 의미

\s : whitespace 문자(space tab처럼 공백을 표현하는 문자)와 매치, [\t\n\r\f\v]와 동일

\S : whitespace 문자가 아닌 것과 매치, [^\t\n\r\f\v]와동일한 표현식

\w : 문자 + 숫자(alphaneumeric)와매치, [a-zA-Z0-9_]와 동일한 표현식

\W : 문자 + 숫자(alphanumeric)이아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식

Dot(.)

- 정규 표현식의 Dot(.)의메타 문자는 줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미

Ex) a.b <- a b 사이에줄바꿈 문자를 제외한 어떤 문자가 들어가도 모두 매치

a[.]b <- a b 사이에Dot(.) 문자가 있으면 매치

([ ] 안에 .이 있으면Dot 메타 문자가 아닌 글자 . 자체를 의미)

 

반복 (*)

- 바로 앞에 있는 문자가 반복될 수 있음을 의미

Ex) ca*t <- *문자가 바로 앞에 있는 a 0번 이상 반복되면 매치

 

반복 (+)

- + *와 달리 최소1번 이상 반복될 때 사용. * 0부터라면, + 1부터임

 

반복({m, n}, ?)

- 반복 횟수를 제한하고 싶다면 {} 메타 문자를 사용 {m ,n}이라면 반복 횟수가 m부터n까지 매치 가능

Ex) {3,} -> 반복횟수 3이상인 경우, {,3} -> 반복횟수 3 이하

ca{2}t -> a 2번반복되면 매치

ca{2,5}t -> a 2번이상 5번 이하로 반복되면 매치

 

?가 의미하는 메타문자는 {0,1}

Ex)ab?c -> b 0~1번사용되면 매치

 

파이썬에서 정규 표현식을 지원하는 re 모듈

- 파이썬은 정규 표현식을 지원하기 위해 re(regular expression) 모듈을 제공한다.

사용법은 import re, re.compile을 사용한다.

 

정규식을 사용한 문자열 검색 (메서드 4가지)

- match() : 문자열의 처음부터 정규식과 매치되는지 조사

- search() : 문자열 전체를 검색하여 정규식과 매치되는지조사

- findall() : 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려줌

- finditer() : 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려줌

 

Match 객체의 메서드

- match 메서드와 search메서드를수행한 결과로 돌려준 match 객체에 대해 여러 메소드를 통해 활용할 수 있다.

- group() : 매치된 문자열을 돌려준다.

- start() : 매치된 문자열의 시작 위치를 돌려준다.

- end() : 매치된 문자열의 끝 위치를 돌려준다.

- span(): 매치된 문자열의 (시작, )에 해당하는 튜플을 돌려준다.

 

컴파일 옵션 ()안은 약어

- DOTALL (S) : dot 문자(.)가 줄바꿈 문자를 포함하여 모든 문자와 매치한다.

- IGNORECASE (I) : ·소문자에관계 없이 매치한다.

- MULTILINE(M) : 여러 줄과 매치한다. (^, $ 메타 문자의 사용과 관계가 있는 옵션)

- VERBOSE(X) : verbose 모드를 사용한다(정규식을 보기 편하게 만들 수도 있고 주석 등을 사용)

DOTALL, S

- 메타 문자는 줄바꿈 문자(\n)을제외한 모든 문자와 매치되는 규칙이 있다.

- 줄바꿈 만자도 포함하여 매치하고 싶다면 re.DOTALL 또는 re.S 옵션을 사용해 정규식을 컴파일

 

IGNORECASE, I

- re.IGNORECASE 또는 re.I옵션을 사용하면 [a-z] 정규식은 소문자를 의미하지만 대·소문자구분 없이 매치된다.

 

MULTILINE, M

- ^은 문자열의 처음을 의미하고,$는 문자열의 마지막을 의미한다.

Ex) ‘^python’ 문자열의 처음은 항상 python으로 시작

‘python$’ 문자열의 처음은 항상 python으로 끝남

- ^메타 문자를 문자열 전체의 처음이 아니라 각 라인의 처음으로인식시키고 싶은 경우, re.MULTILINE 또는 re.M이다.

 

VERBOSE, X

- 정규식을 주석 또는 줄 단위로 구분할 수 있는 옵션

 

백슬래시

- 예를들어 “\section” 의문자열을 찾기 위한 정규식을 만들면 \s문자가 whitespace로해석된다.

[\t\n\r\f\v]section

-> \\section

- 정규식에 Raw String임을알려주려면 r문자를 삽입하면 된다.

 

 

 

 

3.

data = """
park 800905-1049118
kim 700905-1059119
"""

result = []

for line in data.split("\n"):
word_result = []
for word in line.split(" "):
if len(word) == 14 and word[:6].isdigit() and word[7:].isdigit():
word = word[:6] + "-" + "*******"
word_result.append(word)
result.append(" ".join(word_result))

  Comments,     Trackbacks