[Do it] 점프 투 파이썬 - 11일차
1. 기본 내용
공부 날짜: 2019년 8월 12일 (월)
2. 스터디 내용
공부 범위:
1장 파이썬이란 무엇인가?
2장 파이썬 프로그래밍의 기초, 자료형
3장 프로그램의 구조를 쌓는다! 제어문
4장 프로그램의 입력과 출력은 어떻게 해야 할까?
5장 파이썬 날개 달기
6장 파이썬 프로그래밍, 어떻게 시작해야 할까?
7장 정규 표현식
공부 내용:
7-3 강력한 정규 표현식의 세계로
--- 문자열의 소비
매치가 진행될 때 현재 매치되고 있는 문자열의 위치가 변경된다는 의미로,
이전에 배운 메타문자 +, *, [ ], { } 등 을 사용할 때 문자열을 소비한다.
이후 배우게 되는 메타 문자는 문자열의 소비가 없다.
--- 메타 문자 |
|는 or의 의미를 갖는다.
A|B -> A 또는 B
--- 메타 문자 ^
문자열의 맨 처음과 매치함을 의미한다.
re.MULTILINE을 사용하면 각 줄에 대해서 적용할 수 있다.
--- 메타 문자 $
문자열의 끝과 매치함을 의미한다.
re.MULTILINE을 사용하면 각 줄에 대해서 적용할 수 있다.
--- \A
문자열의 처음과 매치함을 의미하는 것은 ^와 같지만
re.MULTILINE을 사용하는 경우 각 줄에 대해 적용되지 않는다. (전체 문자열의 처음만 O)
--- \Z
문자열의 끝과 매치함을 의미하는 것은 $와 같지만
re.MULTILINE을 사용하는 경우 각 줄에 대해 적용되지 않는다. (전체 문자열의 끝만 O)
--- \b ( Word boundary )
단어 구분자로, 보통 단어는 whitespace에 의해 구분된다.
--- \B
\b와 반대의 의미로, whitespace로 구분된 단어가 아닌 경우에 매치된다.
--- 그루핑 (Grouping)
그룹을 만들어주는 메타 문자는 ( ) 이다.
group(인덱스) 메서드는 아래와 같이 해당 그룹에 매치된 문자열만 반환할 수 있다.
(Park)1 (010-(7171)3)2-(1757)4
그룹이 중첩되면 바깥부터 인덱싱한다.
--- 그루핑된 문자열 재참조하기
두번째 그룹을 참조하려면 \2이다.
--- 그루핑된 문자열에 이름 붙이기
group()메서드를 사용하여 코드를 작성한 후에 정규식이 수정되어 그룹이 추가, 삭제되면
그 그룹을 인덱스로 참조한 프로그램을 모두 수정해야한다.
이러한 번거로움을 없애기 위해서
(?P<그룹 이름>(그룹))을 사용하면 그룹에 이름을 지정할 수 있다.
그룹 이름을 사용하면 “참조, 재참조,“가 편해진다.
재참조는 (?P=그룹 이름)이라는 확장 구문을 사용한다.
--- 전방 탐색 (Lookahead Assertions)
(?=…) 긍정형 전방 탐색: …의 정규식과 매치되어야 한다.
(?!...) 부정형 전방 탐색: …의 정규식과 매치되지 않아야 한다.
위의 두 경우 모두 문자열을 소비하지 않는다.
(검색어에는 포함, 검색결과에는 제외)
--- 긍정형 전방 탐색
--- 부정형 전방 탐색
(예시) 여러 파일들 중 특정 확장자 파일은 제외하는 코드를 짤 때 유용하다.
위의 복잡한 정규식은 avi확장자 파일을 제외하는 코드이다.
부정형 전방 탐색을 사용하면 특정 문자 포함한 문자열을 제외하는 상황에서 유용하다.
--- 문자열 바꾸기
sub() 메서드를 사용하면 정규식과 매치되는 부분을 다른 문자로 쉽게 바꿀 수 있다.
subn() 메서드를 사용하면 바뀐 결과와 횟수를 튜플로 반환한다.
--- sub() 메서드에 참조 구문 사용하기
--- sub() 메서드의 매개변수로 함수 넣기
--- Greedy vs Non-Greedy
반복에 사용하는 “*, +, ?, {m, n}”은 greedy하기 때문에
매치할 수 있는 문자열을 모두 매치한다,
이때 non-greedy문자인 “?”를 붙여서 “*?, +?, ??, {m, n}?”으로 사용하면
가능한 한 최소의 반복을 수행하도록 돕는다.
3. 스터디 후기
스터디 도중 발생한 문제, 어려웠던 점을 어떻게 해결했는지?
X
간단한 소감
정규 표현식의 공부가 끝남과 동시에 “점프 투 파이썬”을 모두 공부했다.
잊거나 익숙하지 않는 것을 배우는 재미있는 공부였다.