본문 바로가기
Programming/Python

Python에서 정규식사용하기

by 느리게 걷는 즐거움 2024. 5. 17.
반응형

 

Python에서 정규식 사용하기

정규식(Regular Expression)은 문자열에서 특정 패턴을 찾고, 추출하고, 치환하는 데 사용되는 강력한 도구입니다. Python에서는 `re` 모듈을 사용하여 정규식을 다룰 수 있습니다.

정규식 모듈 임포트하기

Python에서 정규식을 사용하려면 먼저 `re` 모듈을 임포트해야 합니다.

import re

 

기본 함수 소개

`re` 모듈에는 다양한 함수들이 있습니다. 그 중에서 자주 사용되는 몇 가지 함수들을 소개하겠습니다.

`re.match()`: 문자열의 시작에서 정규식 패턴을 찾습니다.

`re.search()`: 문자열 전체에서 정규식 패턴을 찾습니다.

`re.findall()`: 정규식과 일치하는 모든 문자열을 리스트로 반환합니다.

`re.sub()`: 정규식 패턴을 다른 문자열로 치환합니다.

 

예제 코드

`re.match()`

`re.match()` 함수는 문자열의 시작 부분에서 패턴이 일치하는지 확인합니다.

import re

pattern = r'hello'
string = 'hello world'

match = re.match(pattern, string)
if match:
    print('Match found:', match.group())
else:
    print('No match')

 

`re.search()`

`re.search()` 함수는 문자열 전체에서 패턴이 일치하는지 확인합니다.

import re

pattern = r'world'
string = 'hello world'

match = re.search(pattern, string)
if match:
    print('Match found:', match.group())
else:
    print('No match')

 

`re.findall()`

`re.findall()` 함수는 정규식 패턴과 일치하는 모든 문자열을 리스트로 반환합니다.

import re

pattern = r'\d+'
string = 'There are 123 apples and 456 oranges.'

matches = re.findall(pattern, string)
print('Matches found:', matches)

 

 

`re.sub()`

`re.sub()` 함수는 정규식 패턴을 다른 문자열로 치환합니다.

import re

pattern = r'apples'
replacement = 'bananas'
string = 'I like apples and apples are my favorite.'

new_string = re.sub(pattern, replacement, string)
print('New string:', new_string)

 

 

정규식 메타문자

정규식에는 다양한 메타문자가 있습니다. 몇 가지 주요 메타문자를 소개합니다.

메타문자 설명
. 임의의 한 문자와 일치합니다.
^ 문자열의 시작을 의미합니다.
$ 문자열의 끝을 의미합니다.
* 0회 이상 반복을 의미합니다.
+ 1회 이상 반복을 의미합니다.
? 0회 또는 1회 반복을 의미합니다.
\d 숫자와 일치합니다.
\w 문자와 일치합니다.
[abc] a, b, c 중 하나와 일치합니다.
[^abc] a, b, c를 제외한 문자와 일치합니다.

이 표를 통해 정규식 메타문자를 한눈에 쉽게 확인할 수 있습니다. 정규식을 사용하여 다양한 패턴 매칭을 할 때 참고하시기 바랍니다.

고급 예제

이메일 주소 추출

정규식을 사용하여 문자열에서 이메일 주소를 추출해보겠습니다.

import re

pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
string = 'Please contact us at support@example.com for further information.'

email = re.search(pattern, string)
if email:
    print('Email found:', email.group())
else:
    print('No email found')

 

정규식 패턴설명

패턴 설명
[a-zA-Z0-9._%+-]+ 소문자 a-z, 대문자 A-Z, 숫자 0-9, 점(.), 밑줄(_), 퍼센트(%), 더하기(+), 빼기(-) 문자를 포함하는 문자 집합입니다.

+는 앞의 문자 집합이 한 번 이상 반복됨을 의미합니다. 즉, 이메일의 사용자 이름 부분을 의미합니다.
@ 이메일의 사용자 이름과 도메인 이름을 구분하는 '@' 기호입니다.
[a-zA-Z0-9.-]+ 소문자 a-z, 대문자 A-Z, 숫자 0-9, 점(.), 빼기(-) 문자를 포함하는 문자 집합입니다.
\. 점(.) 문자를 의미합니다. 도메인과 최상위 도메인(TLD)을 구분하는 역할을 합니다.
[a-zA-Z]{2,} 소문자 a-z와 대문자 A-Z 문자를 포함하는 문자 집합입니다.

{2,}는 앞의 문자 집합이 최소 2회 이상 반복됨을 의미합니다. 즉, 최상위 도메인(TLD)을 의미합니다. 예를 들어, .com, .net, .org 등입니다.

 

전화번호 추출

전화번호 형식의 문자열을 추출하는 예제입니다.

import re

pattern = r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b'
string = 'You can reach me at 123-456-7890 or 987.654.3210.'

phones = re.findall(pattern, string)
print('Phone numbers found:', phones)

정규식 패턴설명

패턴 설명
\b 단어 경계를 의미합니다. 즉, 숫자가 단어의 시작이나 끝에 있어야 합니다. 예를 들어, 숫자가 문자나 다른 숫자와 붙어 있지 않음을 보장합니다.
\d{3} 정확히 3개의 숫자와 일치합니다. 여기서 \d는 숫자(0-9)를 의미하고, {3}은 그 숫자가 3번 반복됨을 의미합니다.
[-.]? 하이픈(-)이나 점(.)이 0번 또는 1번 나타날 수 있음을 의미합니다. ?는 바로 앞의 문자가 0번 또는 1번 나타날 수 있다는 뜻입니다.
\d{3} 다시 3개의 숫자와 일치합니다.
[-.]? 하이픈(-)이나 점(.)이 0번 또는 1번 나타날 수 있음을 의미합니다. ?는 바로 앞의 문자가 0번 또는 1번 나타날 수 있다는 뜻입니다.
\d{3} 정확히 4개의 숫자와 일치합니다. 여기서 \d는 숫자(0-9)를 의미하고, {4}은 그 숫자가 3번 반복됨을 의미합니다.
\b 단어 경계를 의미합니다. 숫자가 단어의 끝에 있어야 합니다.

마치며

이상으로 Python에서 정규식을 사용하는 방법과 다양한 예제들을 살펴보았습니다. 정규식은 복잡한 문자열 처리 작업을 간단하게 만들어주는 매우 유용한 도구입니다. 

 

반응형

'Programming > Python' 카테고리의 다른 글

Python Thread 사용방법  (0) 2024.05.17
Cython: Python 성능 향상  (0) 2024.05.17
파이썬 print함수 사용팁  (0) 2024.04.07
Python Dictionary 사용법  (0) 2024.04.05
Python Set 사용 방법  (2) 2024.04.05