대괄호 [ ] 정규표현식
대괄호는 들어가는 문자 자체를 모두 찾아줍니다. 대괄호안과 밖을 잘 구분해서 사용해야합니다.
예를 들어 "[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)
'파이썬 > 기본문법' 카테고리의 다른 글
파이썬 모듈과 매칭된 파일 확인하고 조작하기 (0) | 2024.06.19 |
---|---|
파이썬 이중, 다중 리스트 1차원 리스트 하나로 만들기 (0) | 2024.03.25 |
파이썬 내장 함수 (0) | 2024.03.04 |
파이썬 클래스 만들기 및 클래스 상속 받기 (0) | 2024.02.16 |
파이썬 파일 읽기 쓰기 (1) | 2024.02.16 |
댓글