18일에 학습한 정규표현식을 먼저 정리하고
19일에는 18일 복습 문제 풀이와 역량 강화를 위한 문제를 풀었습니다.
문제는 사진과 링크로 첨부하겠습니다.
정규표현식 (Regular expressions)
특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
복잡한 문자열의 검색과 치환을 위해 사용되며, Python 뿐만 아니라 문자열을 처리하는 모든 곳에서 사용
메타 문자 (Meta characters)
= 문자가 가진 원래의 의미가 아닌 특별한 용도로 사용되는 문자
. ^ $ * + ? \ | ( ) { } [ ]
정규표현식 연습 사이트
regex101.com
regexr.com
연습 텍스트


1. 일반 문자열 : 정규표현식에서는 대소문자 구분을 하지만 gim flag를 주면 대소문자 구분을 하지 않음
/hello/gm
/hello world/gm
/Hello/gm
/Hello/gim
+ 자주 사용하는 문자 클래스
\d : 숫자 [0-9]와 같다.
\D : 비숫자 [^0-9]와 같다.
\w : 숫자 + 문자 [a-zA-Z0-9]와 같다.
\W : 숫자 + 문자가 아닌 것 [^a-zA-Z0-9]와 같다.
\s : 공백 [ \t\n\r\f\v]와 같다.
\S : 비공백 [^ \t\n\r\f\v]와 같다.
\b : 단어 경계 (`\w`와 `\W`의 경계)
\B : 비단어 경계
2. 처음과 끝(Anchors) : 여러 라인에서 잡기 위해서는 multiline 옵션을 주어야 함
/^hello/gm : 처음에 hello
/hello$/gm : 끝에 hello
3. 모든 문자 : .(dot)은 줄바꿈 문자인 \n 을 제외한 모든 문자와 매치
= . 자체의 문자를 사용하고 싶다면 이스캐이프 문자를 사용
/./gm : 모든 문자열(*과 같은 역할)
/....../gm : 모든 6개의 문자열
+ [] 사이에서 .을 사용할 경우 문자 원래의 의미인 마침표가 됨
4. 택 1 : 대괄호를 사용하면 대괄호 안에 있는 텍스트 중 택 1
/h[eay]llo/gm : 대괄호 안에 문자는 문자 1개에 해당!
/h[ea]l../gm : 총 5개의 문자
5. 범위 : 범위를 지정하여 매칭하고 싶을 때에는 대쉬 (-)를 사용
/h[a-f]llo/gm
/[a-zA-Z0-9]/gm : 모든 알파뱃과 숫자를 찾음
/[^a-zA-Z0-9]/gm : 나머지 문자열을 찾음
6. 부정 : 해당 문자열을 제외하고 찾고 싶을 때에는 부정 (^)을 사용
/h[^ae]llo/gm : 대괄호 안에 있다면 not에 의미
7. 서브패턴 : 서브 패턴은 그룹으로 묶을 수 있음
/(on|ues|rida)/gm : 그룹 1로 3개 중 매칭되는 패턴 찾음
/(?:on|ues)/gm
/(on|ues)|(rida)/gm : 그룹1(on|ues)과 그룹2(rida)로 각각 매칭되는 패턴 찾음
/.(a|e|o)ll./gm
/hello (?!world)/gm : hello 뒤에 world가 오지 않는 것
/hello (?=world)/gm : hello 뒤에 world가 오는 것
8. 수량자 : 해당 문자가 몇 개있는지를 명시하여 패턴을 찾는 방식
= *, +, ?, {}를 사용
_* : 앞에 있는 문자가 0개 ~ N개
_+ : 앞에 있는 문자가 1개 ~ N개
_? : 앞에 있는 문자가 0개 ~ 1개
{3} : 3개
{3,} : 3개 이상
{1,3} : 1개 ~ 3개
_* : 앞에 있는 문자가 0개 ~ N개 ({0,})
_+ : 앞에 있는 문자가 1개 ~ N개({1,})
_? : 앞에 있는 문자가 0개 ~ 1개 ({0,1})
/[0-9]{3}[-.* ][0-9]{4}[-.* ][0-9]{4}/gm
/[0-9a-zA-Z]{2,3}[-.* ][0-9]{3,4}[-.* ][0-9]{4}/gm
/[0-9a-zA-Z]+@[0-9a-zA-Z]+.[a-zA-Z]+/gm
9. 캐릭터 클래스 : 모든 문자나 숫자 등 자주 사용되는 문자 패턴을 캐릭터 클래스로 제공
/\w/gm : 워드
/\w{5} /gm : 5개의 글자와 스페이스 하나
/\W/gm : not 워드
/\d/gm : 숫자
/\D/gm : not 숫자
/\s/gm : 스페이스
/\S/gm : not 스페이스
10. 이스케이프 문자 : 백슬러쉬를 사용하여 이미 사용되고 있는 특수 문자를 표현할 때 사용
/\[.*]/gm : 대괄호([]) 안에 감싸여진 문자열
/\(.*\)/gm : 소괄호 안에 감싸여진 문자열
/\\.*\//gm : 이미 사용되고 있는 특수문자로 감싸여진 문자열
/-.*-/gm : 이스케이프 문자를 사용할 필요가 없는 경우
/\^\^/gm : 이스케이프 문자가 필요한 경우
/:\)/gm : 이스케이프 문자가 필요한 경우
Python 메서드 설명 및 실습



추가 설명
[] 안에서 ^는 반대를 뜻함
* 앞에 오는 문자가 0개를 포함하여 몇 개가 오든 모두 매치
+ 앞에 있는 문자가 최소 한 번 이상 반복되어야 매치
? 앞에 있는 문자가 없거나 하나 있을 때 매치
{m, n} 앞에 있는 문자가 m 번에서 n 번까지 반복될 때 매치
= {m}의 형태로 사용하면 반드시 m 번 반복인 경우만
= {0,} 는 *, {1,} 는 +, {0,1} 는 ? 와 각각 동일
여러 개의 정규표현식들을 | 로 구분하면 or 의 의미가 적용되어 정규표현식들 중 어느 하나와 매치
문자열이 ^의 뒤에 있는 문자로 시작되면 매치 (여러 줄의 문자열일 경우 첫 줄만 적용)
= (단, re.MULTILINE 옵션이 적용되면 각 줄의 첫 문자를 검사하여 매치)
문자열이 $의 앞에 있는 문자로 끝나면 매치 (여러 줄의 문자열일 경우 마지막 줄만 적용)
= (단, re.MULTILINE 옵션이 적용되면 각 줄의 마지막 문자를 검사하여 매치)
\A 는 ^ 와 동일하지만 re.MULTILINE 옵션을 무시하고 항상 문자열 첫 줄의 시작 문자를 검사
\Z 는 $ 와 동일하지만 re.MULTILINE 옵션을 무시하고 항상 문자열 마지막 줄의 끝 문자를 검사
이론의 양이 많아서 추후에 제대로 정리 할 예정입니다.
정리하면서도 헷갈리고 어렵네요 t.t
밑은 학습한 복습 문제 풀이와 역량 강화 문제 입니다.



https://colab.research.google.com/drive/16ZSxks3afITgUuoF26PeY32U6B4kgJtm?usp=sharing
24.01.19 역량 문제 풀이.ipynb
Colaboratory notebook
colab.research.google.com