파이썬/기본문법

파이썬 정규표현식 기초

코데방 2024. 3. 8.
728x90

대괄호 [ ] 정규표현식

 

대괄호는 들어가는 문자 자체를 모두 찾아줍니다. 대괄호안과 밖을 잘 구분해서 사용해야합니다.

예를 들어 "[ca+t]" 는 "c", "a", "+", "t"를 하나씩 모두 찾겠다는 뜻입니다. 

하지만 "c[a]+t" 는 c와 t 사이 a가 한 개 이상인 단어를 찾아달라는 뜻이 됩니다. 

 

대괄호 안에 들어가서 바로 인식이 안되는 하이픈(-) 같은 경우는 앞에 역슬레쉬를 붙여주면 됩니다.

  • "[\-]" : 하이픈이라는 문자 자체를 찾음

 

 

 

하이픈을 그냥 사용하면 범위를 지정할 수 있습니다. 

  • [abc] == [a-c] : a~c까지의 문자
  • [a-zA-Z] : 영어문자 모두
  • [0-9] : 숫자 모두
  • [가-힣] : 한글 모두
  • [0-9a-zA-Z가-힣] : 특수문자를 제외하고 숫자, 영문, 한글 모두

 

 

 

아래 문자클래스를 대괄호에 넣어주면 좀 더 간결하게 표현할 수 있습니다. 

  • \d : 숫자
  • \D : 숫자가 아닌 것
  • \s : 공백
  • \S : 공백이 아닌 것
  • \w : 문자 + 숫자
  • \W: 문자와 숫자가 아닌 것

 

 

 

점(.) : \n을 제외한 모든 문자와 매치

  • "a.b" : a와 b로 끝나고 사이에 하나의 문자가 있는 모든 문자열 
  • "a.+b" : a와 b로 끝나는 모든 문자열
  • 점(.)이 대괄호 안으로 들어가 있을 경우 그냥 점(.)이라는 문자로 인식됨
str = "+ * ? . \ - : ct cat caat caaat caaaat caaaaaaaat caaaaaaaaaaaaaaaat"
re.findall("c.t", str)

 

str = "+ * ? . \ - : ct cat caat caaat caaaat caaaaaaaat caaaaaaaaaaaaaaaat"
re.findall("c.+t", str)

 

 

 

반복(*) : 0부터 무한대로 반복될 수 있음

  • c[a]*t : a가 몇개여도 상관없음
str = "+ * ? . \ - : ct cat caat caaat caaaat caaaaaaaat caaaaaaaaaaaaaaaat"
re.findall("c[a]*t", str)

 

 

 

 

반복(+) : 1부터 문한대로 반복될 수 있음

  • c[a]+t : a가 1개 이상이면 됨 (cat, caaaaat 등)
str = "+ * ? . \ - : ct cat caat caaat caaaat caaaaaaaat caaaaaaaaaaaaaaaat"
re.findall("c[a]+t", str)

 

 

 

반복 {m, n} : m~n번 반복되는 문자열 매칭

  • c[a]{3}t: a가 3개여야 함
  • c[a]{2, 5}t : a가 2~5개여야 함
str = "+ * ? . \ - : ct cat caat caaat caaaat caaaaaaaat caaaaaaaaaaaaaaaat"
re.findall("c[a]{3}t", str)

 

str = "+ * ? . \ - : ct cat caat caaat caaaat caaaaaaaat caaaaaaaaaaaaaaaat"

re.findall("c[a]{2,5}t", str)

 

 

 

 

물음표(?) : 있어도 되고, 없어도 됨

  • c[a]?t : a가 있어도 되고 없어도 됨
str = "+ * ? . \ - : ct cat caat caaat caaaat caaaaaaaat caaaaaaaaaaaaaaaat"

re.findall("c[a]?t", str)

 

 

 

파이썬 정규표현식 사용하기

 

정규표현식 라이브러리 "re"를 사용합니다.

import re

 

 

 

보통 자주 사용되는 함수는 "findall(패턴, 문자열)" 입니다.

먼저 문서를 하나 열어줍니다. 코로나로 검색한 뉴스 검색 결과가 어지럽게 나와있는 자료입니다. 

f = open("코로나.txt")
covid = f.read()
f.close()

print(covid)

 

 

 

먼저 한글 문자를 하나씩 찾아보겠습니다.

re.findall("[가-힣]", covid)

 

 

 

문자를 하나씩만 찾기 때문에 한글자씩 나옵니다. 

 

 

 

이번에는 문자가 몇 개가 있건 한글을 찾으라고 +를 붙여줍니다. 

공백 또는 한글이 아닌 문자가 나오기 전까지 하나의 매칭으로 보기 때문에 한글 단어들이 찾아집니다.

 

re.findall("[가-힣]+", covid)

 

 

 

 

 

특정 갯수의 한글 단어를 찾고싶다면 아래와 같이 중괄호{}를 이용해주면 됩니다.

{n}은 n개, {m,n}은 m~n개, {,n}은 ~n개, {m, }은 m개이상을 의미합니다. 

re.findall("[가-힣]{3}", covid)

 

 

 

이번에는 영어로 이루어진 단어만 골라내봅니다.

re.findall("[a-zA-Z]+", covid)

 

 

 

아래와 같이 문자클래스를 사용해 숫자만 뺄 수 있습니다.

공백도 상관없지만 숫자가 나오는순간 하나의 매칭으로 잘리고 숫자를 건너뛴 후 다음 매칭이 시작됩니다. 

re.findall("[\D]+", covid)

 

 

 

 

 

19로 끝나는 단어를 찾아보겠습니다. 

어떤 문자가 하나 이상 있고 끝은 19다 라는 의미입니다. 

만약 19을 대괄호 안에 넣어버리면 1과 9를 찾으라는 의미가 됩니다.

대괄호 밖으로 빼줘야 19라는 단어 자체를 찾을 수 있습니다.

re.findall("[\w]+19", covid)

 

 

 

 

 

 

 

 

 

 

 

 

728x90

댓글

💲 추천 글