수업 목표
- 메타 문자의 의미와 사용법으르 이해할 수 있다.
- re 모듈의 compile 매서드를 통해 패턴 객체를 생성할 수 있다.
- 패턴 객체를 통해 문자열 검색 메서드를 사용할 수 있다.
- 컴파일 옵션 4가지 종류를 설명할 수 있다.
1. 정규표현식 기초, 메타 문자
메타 문자
- 원래 해당 문자가 가진 뜻이 아닌 특별한 의미를 가진 문자
- 정규 표현식에 다음 메타 문자를 사용하면 특별한 의미를 지님 : . ^ $ * + ? { } [ ] \ | ( )
[ ] 문자
- [ 와 ] 사이의 문자들과 매치
e.g. [abc]는 a, b, c 중 한 개의 문자와 매치를 의미함
- [ 와 ] 사이에 -를 사용하면 범위를 의미함
e.g. [a-c]는 [abc]와 동일
e.g. [A-Za-z] : 모든 알파벳
e.g. [0-9] : 모든 숫
- ^ 는 not을 의미함
e.g. [^0-9] : 숫자가 아닌 문자만 매
- 자주 사용하는 문자 클래스는 별도의 표기법이 존재
- \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_]
. 문자
- \n을 제외한 모든 문자
e.g. a.b == a + 모든문자 + b
* 문자
- * 바로 앞 문자가 0부터 무한대까지 반복될 수 있음을 의미
e.g. ca*t == ct, cat, caaat
+ 문자
- + 문자 바로 앞문자가 1부터 무한대까지 반복될 수 있음을 의미
e.g. ca+t == cat, caaat
{} 문자
- 반복 횟수의 범위를 제한하고 싶을 때 사용
e.g. ca{3,5}t == caaat, caaaaat
e.g. ca{1,}t == ca+t
e.g. ca{0,}t == ca*t
e.g. ca{3}t == caaat
? 문자
- {0, 1} 과 같은 의미로 앞에 있는 문자가 있어도 없어도 괜찮음
e.g. ca?t == ct, cat
2. re 모듈
- 정규표현식을 지원하는 파이썬 ㅈ표준 라이브러리
- import re; p = re.compile('ab*')
- re.compile로 정규표현식 컴파일한 후 할당하여 작업 수행
3. 정규식을 이용한 문자열 검색
문자열 검색
- match()
- 문자열의 처음부터 정규식과 매치되는지 확인
- 일치하는 부분에 대해 span(index)과 매치한 부분을 담은 match 객체를 리턴
- 매치하지 않으면 None 리턴
- search()
- 문자열 전체를 검색하여 정규식과 매치되는지 확인
- search의 리턴 결과도 match 객체
- findall() : 정규식과 매치되는 모든 문자열을 리스트로 리턴
- finditer() : 정규식과 매치되는 모든 문자열을 반복 가능한 객체(match 객체로 구성)로 리턴
4. match 객체의 메서드
- 매치된 문자열 및 인덱스 확인 가능
- match 객체 메서드 종류 및 기능
- group : 매치된 문자열을 리턴함
- start : 매치된 문자열의 시작 위치를 리턴함
- end : 매치된 문자열의 끝 위치를 리턴함
- span : 매치된 문자열의 (시작, 끝)의 튜플을 리턴함
5. 컴파일 옵션
옵션
- DOTALL(S) : .이 줄바꿈 문자를 포함해 모든 문자와 매치
- IGNORECASE(I) : 대소문자에 관계 없이 매치
- MULTILINE(M)
- ^ &를 사용할 때 여러 줄마다 확인
c.f. ^python은 python으로 시작, python$ python으로 끝남
- VERBOSE(X)
- verbose 모드
- 코드처럼 분할해서 주석처리까지 가능함.
- 이때의 개행과 화이트스페이스는 컴파일 시 제거됨
입력 방식
- re.compile('패턴', 옵션)의 방식으로 입력
e.g. re.compile("[A-Z]+", re.DOTALL)
e.g. re.compile("[A-Z]+", re.M)
6. 역슬래시 문제
- 실제 문자가 정규표현식에서 사용한 문자로 사용되는 혼란 요소
- \를 하나 더 추가해 원래 의도한 실제 문자로 사용
e.g. \section -> \\section으로 표기해야 실제 원하는 \section으로 사용가능
e.g. \\ -> \\\\
- r을 사용해도 똑같은 방식으로 사용해도 문자 그대로 사용 가능
e.g. r"\\section" == \\section
'ROKEY' 카테고리의 다른 글
[20250131] 파이썬 프로그래밍 - 알고리즘 1 (0) | 2025.01.31 |
---|---|
[20250124] 파이썬 프로그래밍 - 고급함수 (0) | 2025.01.24 |
[20250122] 파이썬 프로그래밍 - 예외처리, 문자열, 람다함수, map함수 (0) | 2025.01.22 |
[20250121] 파이썬 프로그래밍 - 파일 처리 (0) | 2025.01.21 |
[20250120] 파이썬 프로그래밍 - tkinter (0) | 2025.01.20 |