일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 후기
- 혼공단
- 맛있는디자인스터디12기
- 스터디완료
- 챌린지
- Doit파이썬스터디
- CC2023
- 혼공
- 제이펍
- 회고
- 혼공머신
- 애프터이펙트
- 혼공분석
- 맛있는디자인스터디13기
- CS2023
- 진짜쓰는일러스트레이터
- 혼공C
- 맛있는디자인
- Doit점프투파이썬
- 프리미어프로
- 3주차후기
- 혼공파
- 전면개정2판
- 생성형AI
- 혼공학습단
- 혼공자
- 스터디
- 혼공JS
- 맛있는디자인스터디11기
- 6주차후기
- Today
- Total
애독자's 공부방
[11주차] Do it! 파이썬 스터디 노트 - 점프 투 파이썬 본문
Do it! 파이썬 스터디 노트: 점프 투 파이썬 전면 - 개정 2판
1. 《Do it! 점프 투 파이썬》 -전면 개정 2판 글감을 추가해주세요.
2. 미션 인증샷을 남겨 주세요! (책과 함께 공부하는 모습을 찍어주세요! 책과 모니터가 함께 보이면 더 좋아요!)

3. 이번 미션을 진행하면서 좋았던 점이나 어려웠던 점 또는 새로 알게 된 점이 있었나요? (200자 내외 / 실습 부분을 캡쳐해도 좋아요!)
📖
|
미션 범위 (점프 투 파이썬 책 페이지)
|
일정
|
11주차
|
정규표현식 (355pg - 384pg)
|
9/4-9/10
|
저자님께서 '정규 표현식'을 이 책에 포함해야 할지 오랜 시간 고민하셨다고 합니다. 고급 주제이기 때문에 초보자를 대상으로 하는 책에는 어울리지 않을 수 있기 때문인데요. 정규 표현식을 익히기만 하면 파이썬 외에 또 하나의 강력한 무기를 얻게 되기에 중요하다고 합니다. 하지만 입문자에게는 어려운 내용이니 부담은 갖지 말고 산책하듯 읽어보라고 하시네요. 책의 내용은 파이썬 공식 문서에서 소개하는 내용이라고 합니다. ( https://docs.python.org/3.11/howto/regex.html )
1. 정규 표현식 살펴보기
- 정규 표현식(Regular Expressions): 복잡한 문자열을 처리할 때 사용하는 기법으로 파이썬 외 문자열을 처리하는 모든 곳에서 사용하는 일종의 형식 언어
- 주민등록번호를 포함하고 있는 텍스트가 있다. 이 텍스트에 포함된 모든 주민등록번호의 뒷자리를 * 문자로 변경해 보자.
. 정규식을 모르는 경우
1) 전체 텍스트를 공백 문자로 나눔(split) | 2) 나뉜 단어가 주민등록번호 형식인지 조사
3) 단어가 주민등록번호 형식이라면 뒷자리를 *로 변환 | 4) 나뉜 단어를 다시 조립
. 정규식을 사용하면 훨씬 간편하고 직관적인 코드 작성이 가능
2. 정규 표현식 시작
- 메타 문자(meta characters): 그 문자가 가진 뜻이 아닌 특별한 의미를 가진 문자 → . ^ $ * + ? { } [ ] \ | ( )
- 문자 클래스(character class): []
. 의미: '[' 와 ']' 사이의 문자들과 매치
- [ ] 안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위를 의미
※ [a-zA-Z] : 알파벳 모두 / [0-9] : 숫자 / ^사용: 반대(not)의 의미
→ \d = [0-9] | \D = [^0-9] | \s = [ \t\n\r\f\v] | \S = [^ \t\n\r\f\v] | \w = [a-zA-Z0-9_] | \W = [^a-zA-Z0-9_]
- .(dot)문자: : 줄바꿈 문자인 \n을 제외한 모든 문자와 매치
. a.b: a와 b라는 문자 사이에 줄바꿈 문자인 \n을 제외한 모든 문자와 매치
. a[.]b: 'a.b' 하고만 매치
- *문자: * 바로 앞에 있는 문자가 0부터 무한대로 반복될 수 있다는 의미
- +문자: + 바로 앞에 있는 문자가 최소 1번 이상 반복될 때 사용
- {m,n}와 ?문자: 반복 횟수가 m부터 n회 까지 반복되어 매치되며, ? 메타문자가 의미하는 것은 {0, 1}
- re(regular expression) 모듈: re.compile을 사용하여 정규 표현식을 컴파일
- 정규식을 이용한 문자열 검색
. match(): 문자열의 처음부터 정규식과 매치되는지 조사 (부합되지 않을 때는 None 리턴)
. search(): 문자열 전체를 검색하여 정규식과 매치되는지 조사
. findall(): 패턴과 매치되는 모든 값을 찾아 리스트로 리턴
. finditer(): 패턴과 매치되는 모든 값을 반복 가능한 객체(iterator object)로 리턴
- match 객체의 메서드
. group(): 매치된 문자열을 리턴
. start(): 매치된 문자열의 시작 위치를 리턴
. end(): 매치된 문자열의 끝 위치를 리턴
. span(): 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 리턴
- re 모듈의 축약: p = re.compile('[a-z]+') + m = p.match("python") → m = re.match('[a-z]+', "python")
- 컴파일 옵션: re.DOTALL = re.S
. DOTALL(S): .(dot)이 줄바꿈 문자를 포함해 모든 문자와 매치
. IGNORECASE(I): 대소문자에 관계없이 매치
. MULTILINE(M): 여러 줄과 매치. ^(처음), $(마지막) 메타 문자의 사용과 관계가 있는 옵션
. VERBOSE(X): verbose 모드를 사용. 정규식을 보기 편하게 만들 수 있고 주석 등을 사용 가능
- 역슬래시 문제
. 정규식 엔진(정규식을 해석하고 수행하는 모듈)에 \\ 문자를 전달하려면 \\\\처럼 역슬래시를 4개 사용
. 정규식 문자열 앞에 r 문자를 삽입: raw string 규칙에 의하여 역슬래시 1개만 써도 2개를 쓴 것과 동일한 의미 (r'\\')
3. 강력한 정규 표현식의 세계로
- 문자열 소비가 없는 메타 문자
. |: or | ^: 문자열의 맨 처음과 일치 | $: 문자열의 끝과 매치 | \A: 문자열의 처음과 매치 | \Z: 문자열의 끝과 매치
. \b: 단어 구분자(Word boundary)로써 앞뒤가 화이트스페이스로 구분된 단어와 매치 ← 백스페이스가 아님을 나타내기 위해 r붙임
. \B: 화이트스페이스로 구분된 단어가 아닌 경우에만 매치
- 그루핑(Grouping): 그룹을 만들어 주는 메타 문자로 ()
. group(인덱스): group(0)=매치된 전체 문자열 | group(1)=첫 번째 그룹에 해당되는 문자열 | group(n)=n 번째 그룹에 해당되는 문자열
. 그루핑한 문자열을 재참조(Backreferences): \1은 정규식의 그룹 중 첫 번째 그룹, 두 번째 그룹을 참조하려면 \2를 사용
- 그루핑된 문자열에 이름 붙이기: 그룹을 인덱스가 아닌 이름(named groups)으로 참조
. (\w+) → (?P<name>\w+)
. 재참조: (?P=그룹이름)
- 전방 탐색(lookahead assertions)
. 긍정형 전방 탐색 (?=...): ... 에 해당되는 정규식과 매치되어야 하며 조건이 통과되어도 문자열이 소비되지 않음
. 부정형 전방 탐색 (?!...): ...에 해당되는 정규식과 매치되지 않아야 하며 조건이 통과되어도 문자열이 소비되지 않음
- sub 메서드: 정규식과 매치되는 부분을 다른 문자로 쉽게 변경
. 첫 번째 인수: 바꿀 문자열(replacement) | 두 번째 인수: 대상 문자열 | 세 번째 인수: 바꾸기 횟수
※ subn 메서드: sub와 동일한 기능이지만 반환 결과가 튜플 (튜플의 첫 번째 요소: 변경된 문자열, 두 번째 요소: 바꾸기가 발생한 횟수)
. sub의 바꿀 문자열 부분에 \g<그룹이름>을 사용: 정규식의 그룹 이름을 참조 가능 (참조 번호도 마찬가지 결과를 리턴)
. sub 메서드의 첫 번째 인수에 함수 전달도 가능
- 정규식에서 탐욕스러운(greedy) 의미: 최대한 많이 매칭 → <.*> 정규식
. non-greedy 문자: 최소한으로 반복을 수행하도록 도와주는 ?이며 *?, +?, ??, {m,n}?와 같이 사용 → <.*?>
4. 스터디를 같이 진행하는 분들과 (동지들과!) 함께 이야기 나누고 싶은 부분이 있다면 작성해 주세요!
아! 정규식 너무 어려운 것 같습니다. 저자님처럼 잘 활용하지는 못하겠지만 그래도 가장 기본적인 내용을 써보려고 노력 중입니다. [a-zA-Z0-9] 및 match(), findall() 정도인데 필요할 때 생각이 안 나면 다시 책을 보거나, 혹은 공식 문서에 정리된 내용을 참고하여 적용할 수는 있을 것 같아서 다행입니다.
□ 1년 전 스터디 노트 (개정판)
https://cafe.naver.com/doitstudyroom/38547
'Python > Do it! 파이썬 스터디 2기' 카테고리의 다른 글
[12주차] Do it! 파이썬 스터디 노트 - 점프 투 파이썬 (0) | 2023.09.16 |
---|---|
[10주차] Do it! 파이썬 스터디 노트 - 점프 투 파이썬 (0) | 2023.09.16 |
[9주차] Do it! 파이썬 스터디 노트 - 점프 투 파이썬 (2) | 2023.09.16 |
[7주차] Do it! 파이썬 스터디 노트 - 점프 투 파이썬 (0) | 2023.09.16 |
[6주차] Do it! 파이썬 스터디 노트 - 점프 투 파이썬 (0) | 2023.08.03 |