티스토리 뷰
프로그래밍을 하다 보면 문자열을 배열하고 가공해야 할 일이 자주 생깁니다. 이메일 주소를 추출하거나, 특정 패턴의 로그를 찾거나, 단어를 필터링하는 일까지—이럴 때 **정규 표현식(Regular Expression)**은 강력한 무기가 됩니다.
이 글에서는 정규 표현식의 기본 개념과 자주 사용하는 메타 문자들을 소개하고, 다양한 실전 예제를 통해 어떻게 활용하는지 상세히 살펴보겠습니다.
✅ 정규 표현식이란?
정규 표현식은 특정 문자열 패턴을 찾거나 검사하기 위해 사용하는 표현 방식입니다. 텍스트에서 원하는 형태의 데이터를 빠르게 추출하거나 검증하는 데 사용됩니다.
예를 들어, 아래와 같은 작업이 가능합니다:
- 이메일 주소인지 확인
- 핸드폰 번호에서 숫자만 추출
- 로그 파일에서 특정 시간대의 기록만 찾기
- 파일 이름에서 확장자 구분하기
- 문장 안에서 특정 단어 패턴 찾기
🔤 주요 메타 문자(Meta-characters) 정리
1. 문자 단위 매칭
기호 설명 예시
| . | 아무 문자 하나 | a.b → acb, a3b, a_b 등 (단, 줄바꿈 문자는 제외) |
| ^abc | 문자열의 시작 | ^Hello는 "Hello world"에는 매치되지만, "Say Hello"에는 매치되지 않음 |
| abc$ | 문자열의 끝 | end$는 "This is the end"에는 매치되지만, "ending soon"에는 매치되지 않음 |
| [abc] | a, b, c 중 하나 | gr[ae]y는 gray, grey에 모두 매치 |
| [^abc] | a, b, c 제외한 하나의 문자 | [^0-9]는 숫자를 제외한 모든 문자 |
| [A-Z0-9] | 대문자 또는 숫자 | ID[A-Z0-9]+는 ID4, IDA123, IDZ에 매치 |
2. 반복 관련 기호 (Closure)
반복 관련 기호들은 문자가 몇 번 반복되는지를 지정할 수 있게 해주는 중요한 도구입니다. 아래는 각 기호의 의미와 함께 보다 상세한 예시 설명을 포함하고 있습니다.
기호 설명 예시 및 설명
| * | 0회 이상 반복 | 패턴 go*gle은 gogle, google, gooogle처럼 o가 0번 이상 반복될 수 있습니다. ggle도 허용됩니다. |
| + | 1회 이상 반복 | 패턴 go+gle은 o가 반드시 1번 이상 나와야 하므로 google, gooogle은 매치되지만, ggle은 매치되지 않습니다. |
| ? | 0 또는 1회 | 패턴 colou?r은 u가 있어도 되고 없어도 되므로 color와 colour 모두에 매치됩니다. colouur은 매치되지 않습니다. |
| {n} | 정확히 n번 반복 | \d{4}는 정확히 4자리 숫자를 의미하며, 2024, 1999 등 4자리 숫자에만 매치됩니다. 123, 12345는 매치되지 않습니다. |
| {n,} | 최소 n번 반복 | a{2,}는 a가 최소 2번 이상 반복되는 경우로, aa, aaa, aaaaa 모두 매치되며, a는 매치되지 않습니다. |
| {,n} | 최대 n번 반복 | a{,2}는 a가 최대 2번까지 반복되는 경우로, ``, a, aa는 매치되며 aaa는 매치되지 않습니다. |
| {m,n} | m~n번 반복 | \d{2,4}는 숫자가 2~4자리 반복되는 경우로, 12, 123, 1234는 매치되며, 1이나 12345는 매치되지 않습니다. |
3. 논리 연산자 및 그룹
이 부분에서는 선택 또는 그룹화된 부분에 대해 패턴을 구성할 수 있습니다.
기호 설명 예시 및 설명
| `a | b` | a 또는 b |
| (abc) | 괄호로 그룹 지정 | (ha)+는 ha, hahaha, hahahaha 등에서 ha라는 그룹이 반복되는 구조를 잡을 수 있습니다. 그룹을 지정하면 나중에 재사용도 가능합니다. |
| `a(b | c)+` | 그룹 내 선택 반복 |
4. 문자 클래스 약어
문자 클래스를 편리하게 사용할 수 있도록 미리 정의된 약어입니다. 아래 약어들을 사용하면 코드가 더 짧고 읽기 쉬워집니다.
기호 설명 동등 표현 예시
| \d | 숫자 | [0-9] | \d+는 하나 이상의 숫자 (예: 123, 9) |
| \D | 숫자 제외 | [^0-9] | \D+는 문자나 기호 등 숫자가 아닌 것들 (예: abc!) |
| \s | 공백 문자 | [ \t\n\r\f\v] | 공백, 탭, 줄바꿈 등에 매치됨 (예: \s+는 여러 공백) |
| \S | 공백 제외 | [^ \t\n\r\f\v] | 공백이 아닌 모든 문자 (예: 단어, 숫자 등) |
| \w | 단어 문자 (영문자, 숫자, 언더바) | [a-zA-Z0-9_] | 변수명, 사용자 ID 등에서 자주 사용 |
| \W | 단어 문자가 아닌 것 | [^a-zA-Z0-9_] | 구두점, 기호 등 (예: !, @, #) |
💡 실전 예제
1. 이메일 주소 검증
import re
pattern = r"^[\w\.-]+@[\w\.-]+\.\w{2,}$"
tests = ["user@example.com", "my-email@domain.co.kr", "invalid@@test"]
for t in tests:
print(f"{t}:", bool(re.match(pattern, t)))
2. 전화번호에서 숫자만 추출
text = "전화번호: 010-1234-5678"
re.findall(r"\d+", text) # ['010', '1234', '5678']
3. 특정 확장자의 파일 찾기
text = "image.jpg, test.GIF, photo.png, doc.txt"
re.findall(r"\b\w+\.(jpg|png|gif)\b", text, re.IGNORECASE)
# ['jpg', 'GIF', 'png']
4. 숫자 4자리 연도 추출
text = "Born in 1995, graduated in 2018."
re.findall(r"\b\d{4}\b", text) # ['1995', '2018']
5. 괄호 안의 내용 추출
text = "He said (hello) and left."
re.findall(r"\((.*?)\)", text) # ['hello']
6. 여러 공백 문자 제거 (탭, 줄바꿈 등 포함)
text = "Hello\tWorld\nNew\rLine"
re.sub(r"\s", "", text) # 'HelloWorldNewLine'
7. URL 추출
text = "Visit https://example.com or http://test.org."
re.findall(r"https?://[\w./-]+", text)
# ['https://example.com', 'http://test.org']
🧠 마무리
정규 표현식은 처음엔 어렵게 느껴질 수 있지만, 기본 개념과 패턴에 익숙해지면 매우 유용한 도구가 됩니다. 위에서 소개한 메타 문자들과 예제들은 실무에서도 자주 쓰이는 것들이니 자주 테스트하며 익혀보세요!
혹시 정규 표현식에 대해 더 궁금한 부분이 있거나, 자주 쓰는 패턴을 공유하고 싶으시다면 댓글로 남겨주세요 😊
'Python > Python Library' 카테고리의 다른 글
| Python에서 SQLAlchemy와 psycopg2를 사용한 PostgreSQL 데이터베이스 연동하기 (0) | 2025.02.02 |
|---|---|
| "100 Numpy Exercises"로 Numpy 마스터가 되어봅시다! (1) | 2024.12.19 |
| NumPy에서의 transpose와 reshape (1) | 2024.11.21 |
| Numpy 함수 : pad / zeros (0) | 2024.11.21 |
| defaultdict와 dict의 차이: defaultdict 라이브러리 소개 (1) | 2024.11.20 |
- Total
- Today
- Yesterday
- 1164회 로또
- 자동매매
- 골든크로스
- chat gpt 모델 별 가격
- chat gpt 모델 api 가격 예측
- Numpy
- 차트분석
- 기술적분석
- 장고 orm sql문 비교
- 1165회 로또
- chat gpt 한국어 가격
- chat gpt 모델별 예산
- 자동매매로직
- chat gpt 4o 예산
- 주식공부
- 퀀트투자
- 인공지능 로또 예측
- 주식투자
- 티스토리챌린지
- chat gpt 가격 예상
- 케라스
- 토치비전
- Python
- 클래스형 뷰
- 오블완
- 주린이탈출
- 로또 1164회 당첨
- chat gpt api 비용 계산
- 로또 ai
- 재테크
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |