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 |