박응용
이지스퍼블리싱 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))
'Python' 카테고리의 다른 글
Day13 Do it! 점프 투 파이썬 스터디 노트 (0) | 2020.04.09 |
---|---|
Day12 Do it! 점프 투 파이썬 스터디 노트 (0) | 2020.04.08 |
Day10 Do it! 점프 투 파이썬 스터디 노트 (0) | 2020.04.06 |
Day9 Do it! 점프 투 파이썬 스터디 노트 (0) | 2020.04.05 |
Day8 Do it! 점프 투 파이썬 스터디 노트 (0) | 2020.04.03 |