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

24.01.19

혼복필 2024. 1. 20. 16:50
728x90
300x250
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
300x250
LIST

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

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