Python 심화15 - 정규표현식

do yeon kim·2022년 6월 8일
0

Python(심화)_fastcampus

목록 보기
15/24

정규표현식

언제 사용할까?

  • 문자열에서 특정 패턴을 찾고 싶을 때 사용한다.
  • .find(), .split(), .strip()으로만 문자열에서 원하는 데이터를 찾기 어려울경우

왜 사용할까?

  • 유효성검사
    사용자가 데이터를 조건에 맞게 입력했는지 등을 확인시 사용될수있다
    ex)회원가입 시 아이디, 비밀번호 등의 조건을 정규표현식을 활용해서 만들수있다.

  • 필요한 문자열추출하기 위해서 사용한다.

  • 거의 모든 언어에서 지원된다(범용성이 높다)

단점은 무었일까?

  • 가독성이 좋지 않다. 처음보면 암호같다.
  • 유지보수가 힘들다. 다른사람이 짠 코드를 보고 이해하기 어려울 수 있다.

정규표현식 사용방법1

  • Flags global multline
  • Character classes
  • Anchors
  • Excaped Characters

정규표현식 연습 사이트 https://regexr.com/


Character classes

.
모든문자들을 찾는다.

\w 알파벳,숫자,언더라인
\W 알파벳, 숫자,
언더라인 제외한 모든것

\d 숫자
\D 숫자를 제외한 모든것

\s 공백문자(띄어쓰기)
\S 공백이아닌것

[abc] a나b나c
[^abc] a,b,c가 아닌 모든 문자열
[a-g] a에서 g까지의 소문자영문자
[a-z] 소문자
[A-Z] 대문자
[가-힣] 모든 한글문자
[a-zA-Z] 모든 영문자
[a-zA-Z0-9] 모든 영문자 모든 숫자


Anchors

^abc 문장의 시작이 abc (문장안에 들어있는 단어가 아니라 문장이다)
abc$ 문장의 끝이 abc

^ => [ ]안에서 사용될때는 not, 괄호밖에서 사용될때는 start

\b단어 단어로 시작
단어\b 단어로 끝나는 것 찾는다.

\B단어 단어의 앞부분이 단어가 아닌 것들
단어\B 단어의 뒷부분이 단어가 아닌 것들

ex)
apple
appleappleapple
pineapple

\b apple => appleappleappleapple 과 apple
apple \b => apple과 pineapple 과 appleappleapple

\B apple => pineapple 과 appleappleapple

apple \B => appleappleapple


Excaped Characters

\. 마침표 문자 자체를 의미한다. 점만 찾고 싶을 경우
\* 별표를 찾고 싶을경우
\\ \ 역슬래쉬를 찾고 싶은경우

다른 특수문자를 포함하는 것도 \를 활용하면 찾을 수 있다.
\t
\n
\r


정규표현식 사용방법2

Quantifiers & Alternation
Groups & Lookaroud

  • Quantifiers 수량자
  • Alternation or 연산과 비슷
  • Groups 그룹만들기
  • Lookaroud 전방탐색

Quantifiers

수량자 => 몇개가 들어갈것인가
문자+문자+문자+문자+문자 => 단어
a+p+p+l+e => 단어
ap*ple
ap+ple*
ap?ple

문자* 문자가 0개또는 여러개
문자+ 문자가 1개 또는 그 이상
문자? 문자가 0개 또는 1개

ex)
rait rabit rabbit rabbbit rabbbbit

rab*it b가 0개 또는 이상 rait rabit rabbit rabbbit rabbbbit

rab+it b가 1개 또는 이상 rabit rabbit rabbbit rabbbbit

rab?it b가 0개 또는 1개 rait rabit

중괄호이용
문자{숫자} 문자가 정확히 숫자만큼 있어야한다.
문자{숫자,} 문자가 숫자또는 그 이상 있는것을 찾는다.
문자{숫자,숫자} 문자가 숫자와 숫자 사이에 있는 것만 찾는다.

중괄호이용
rab{2}it b가 2개 rabbit
rab{2,}it b가 2개 또는 이상 rabbit rabbbit rabbbbit
rab{2,3}it brk 2~3사이 rabbit rabbbit

ex)
#좋아요, #좋아요반사, #팔로우, #맞팔,

#.+, #좋아요, #좋아요반사, #팔로우, #맞팔, 하나의 덩어리로 나온다

#을찾는다
.모든문자 + 문자가 하나또는 그이상
,

#, 사이에 몇개의 문자가 오는지 모른다.

#.+?, 하면 #좋아요, #좋아요반사, #팔로우, #맞팔,
매치가 최소한으로 이루어지는 것으로 나누어서 나온다

#을찾는다
.모든문자, + 모든문자가 하나또는 그이상, 이에대해 ? 0개또는 1개
,

#.{2,3}?, #좋아요, #팔로우, #맞팔,

#을 찾는다.
. #뒤에 모든문자
{2,3} .에 대한 수량자 모든문자가 2개또는3개
? 매치가 최소한으로 이루워지게 한다.
(lazy 문자가 최소한으로 매치되는 것만 찾는다.)


Alternation

a|b a또는b 찾는다.

ex)gray grey

gr[ae]y gray grey
Character classes [ae] a나e

gr(a|e)y gray grey
(a|e)를 그룹으로 만들었다.
a 또는 e


Groups & Lookaroud

그룹
() 그룹
\1 역참조
특정부분만 뽑을경우 그룹을 짖는것 특정한 것만 그룹되서 나온다.

#.+?

역참조
(.+)\s\1 (.+)를 한번더 한다.

(?:abc) 그룹에서 빼고 싶을 경우 \[(?:특가할인|품절)].*

긍정전방탐색
(?=abc) 검색조건에는 포함되나 결과에는 포함되지 않는 .*(?=-레몬스토어)

부정전방탐색
(?!abc) .*(?=-(?!레몬).*스토어)


https://fastcampus.co.kr/dev_online_pyweb

0개의 댓글