[파이썬] 정규 표현식

에구마·2023년 10월 21일
0

Python

목록 보기
11/11

정규 표현식

문자열에서 특정 문자 조합을 찾기 위한 패턴

정규 표현식 문법

[ ]

대괄호 안의 문자와 매치된다.
그냥 문자랑 다른 것은 [ ]을 쓰면 [ ] 안에 조건 중 아무거나 하나라도 매치된다는 것

[abc] → a,b,c 중 하나와 매치

- (하이픈)

대괄호안에서 -(하이픈)은 두 문자 사이의 범위!

[a-c] === [abc]
[a-z] === 모든 소문자
[A-Z] === 모든 대문자
[a-zA-z] === 모든 대,소문자 즉,알파벳
[0-9] === 모든 숫자

^

반대(not)의 의미.
[^0-9] === 숫자가 아닌 문자만 매치


추가 중요 문법


예시와 함께~

.

. :한 개의 임의의 문자를 나타냅니다. (줄바꿈 문자인 \n는 제외)

import re
string = "...!@BaT#*..y.abc defgh 오류 : 404"

숫자

\d : 숫자를 의미합니다
[0-9] :숫자를 의미합니다

print(re.findall('\d', string))
# ['4', '0', '4']

# 여러개를 이어붙이면 그 이어붙인만큼의 갯수임을 뜻한다
print(re.findall('\d\d', string))
# ['40']

문자 또는 숫자

\w :문자 또는 숫자를 의미합니다
[a-zA-Z0-9] : 문자 또는 숫자를 의미합니다

print(re.findall('\w', string))
# ['B', 'a', 'T', 'y', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '오', '류', '4', '0', '4']

# 한국어도 포함한다면 이렇게!
print(re.findall('[a-zA-Z0-9가-힣]', string))
# ['B', 'a', 'T', 'y', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '오', '류', '4', '0', '4']

# 숫자 |(or) 문자  이렇게도 가능
print(re.findall('\d|\w', string))
# ['B', 'a', 'T', 'y', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '오', '류', '4', '0', '4']

\W : 문자 또는 숫자가 아닌 문자를 의미합니다. (특수문자 등)
[a-zA-Z0-9] : 문자 또는 숫자가 아닌 문자를 의미합니다. (특수문자 등)

print(re.findall('\W', string))
# ['.', '.', '.', '!', '@', '#', '*', '.', '.', '.', ' ', ' ', ' ', ':', ' ']

print(re.findall('[^a-zA-Z0-9]', string))
# ['.', '.', '.', '!', '@', '#', '*', '.', '.', '.', ' ', ' ', '오', '류', ' ', ':', ' ']

print(re.findall('[^a-zA-Z0-9가-힣]', string))
# ['.', '.', '.', '!', '@', '#', '*', '.', '.', '.', ' ', ' ', ' ', ':', ' ']

공백

\s : 공백을 의미합니다. [ \t\n\r\f\v]와 의미가 동일합니다.
\S : 공백을 제외한 문자를 의미합니다. [^ \t\n\r\f\v]와 의미가 동일합니다.

print(re.findall('\s', string))
# [' ', ' ', ' ', ' ']

print(re.findall('\S', string))
# ['.', '.', '.', '!', '@', 'B', 'a', 'T', '#', '*', '.', '.', 'y', '.', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '오', '류', ':', '4', '0', '4']

존재 ? * +

? : 앞의 문자가 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 또는 1개)

print(re.findall('\d?', string))
# ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '4', '0', '4', '']

#주로, 이렇게 씀 "숫자가 있다면 ''로 바꿔라(sub)
print(re.sub('\d?', '',string))
# ...!@BaT#*..y.abc defgh 오류 :

* : 앞의 문자가 무한개로 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 이상)

print(re.findall('\d*', string))
# ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '404', '']
# 숫자(\d)인 404를 통채로 봄

++++) \d, \s, \w같은 경우는 문자 그자체 d,s,w와 구분되야 하기에 \를 써야 한다 !!

+ : 앞의 문자가 최소 한 개 이상 존재합니다. (문자가 1개 이상)

print(re.findall("\d+", string))
# ['404']

다른 예시

string = "@BaT#.abc aa"

print(re.findall('a?', string))
# ['', '', 'a', '', '', '', 'a', '', '', '', 'a', 'a', '']

print(re.findall('a*', string))
# ['', '', 'a', '', '', '', 'a', '', '', '', 'aa', '']

print(re.findall('a+', string))
# ['a', 'a', 'aa']

반복 { }

{숫자} : 숫자만큼 반복합니다.
{숫자1, 숫자2} : 숫자1 이상 숫자2 이하만큼 반복합니다. ?, *, +를 이것으로 대체할 수 있습니다.
{숫자,} : 숫자 이상만큼 반복합니다.

print(re.findall('\w{2}', string))
# ['Ba', 'ab', 'de', 'fg', '오류', '40']
## 'Ba'를 탐색하고 'aT'는 무시되었음 주의..

print(re.findall('\w{2,4}', string))
# ['BaT', 'abc', 'defg', '오류', '404']

print(re.findall('\w{2,}', string))
# ['BaT', 'abc', 'defgh', '오류', '404']

print(re.findall('[a-zA-Z]{2,}', string))
# ['BaT', 'abc', 'defgh']

print(re.findall('\S{2,}', string))
# ['...!@BaT#*..y.abc', 'defgh', '오류', '404']

^시작 / 끝$

^ : 뒤의 문자열로 문자열이 시작됩니다.

print(re.findall('^\.',string))
# ['.']

$ : 앞의 문자열로 문자열이 끝납니다.

print(re.findall('\d$',string))
# ['4']


정규 표현식 모듈 함수

모듈 : import re

모듈 함수설명
re.compile()                               정규표현식을 컴파일하는 함수입니다. 다시 말해, 파이썬에게 전해주는 역할을 합니다. 찾고자 하는 패턴이 빈번한 경우에는 미리 컴파일해놓고 사용하면 속도와 편의성면에서 유리합니다.
re.search()문자열 전체에 대해서 정규표현식과 매치되는지를 검색합니다.
re.match()문자열의 처음이 정규표현식과 매치되는지를 검색합니다.
re.split()정규 표현식을 기준으로 문자열을 분리하여 리스트로 리턴합니다.
re.findall()문자열에서 정규 표현식과 매치되는 모든 경우의 문자열을 찾아서 리스트로 리턴합니다. 만약, 매치되는 문자열이 없다면 빈 리스트가 리턴됩니다.
re.finditer()문자열에서 정규 표현식과 매치되는 모든 경우의 문자열에 대한 이터레이터 객체를 리턴합니다.
re.sub()문자열에서 정규 표현식과 일치하는 부분에 대해서 다른 문자열로 대체합니다.

출처 : https://wikidocs.net/21703#2

참고 및 출처

https://wikidocs.net/21703#1

08-2 정규 표현식 시작하기

profile
코딩하는 고구마 🍠 Life begins at the end of your comfort zone

0개의 댓글