BootCamp/모두의연구소:오름캠프

24.01.19

혼복필 2024. 1. 20. 16:50
728x90
SMALL

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

728x90
LIST

'BootCamp > 모두의연구소:오름캠프' 카테고리의 다른 글

24.01.23  (10) 2024.01.23
24.01.22  (4) 2024.01.23
24.01.18  (4) 2024.01.18
24.01.17  (0) 2024.01.17
24.01.16  (2) 2024.01.16