파이썬에서 정규 표현식 활용하기: re 모듈을 이용한 문자열 검색 및 추출
파이썬은 다양한 문자열 처리 기능을 제공하며, 그 중에서도 정규 표현식은 강력한 도구입니다. 정규 표현식은 특정 패턴을 정의하여 문자열에서 원하는 부분을 검색하고 추출하는 데 사용됩니다. 파이썬에서는
re
모듈을 통해 정규 표현식을 사용할 수 있습니다.
1. 정규 표현식 기초
정규 표현식은 특수 문자와 메타 문자를 사용하여 패턴을 표현합니다. 몇 가지 주요 메타 문자와 그 의미는 다음과 같습니다.
메타 문자 | 의미 |
---|---|
.
|
임의의 단일 문자 |
*
|
이전 문자가 0번 이상 반복 |
+
|
이전 문자가 1번 이상 반복 |
?
|
이전 문자가 0번 또는 1번 반복 |
^
|
문자열의 시작 |
$
|
문자열의 끝 |
[]
|
문자 집합 |
\d
|
숫자 (0-9) |
\w
|
단어 문자 (숫자, 문자, 밑줄) |
\s
|
공백 문자 |
예를 들어,
\d+
는 숫자 1개 이상을 나타내고,
[a-z]+
는 소문자 1개 이상을 나타냅니다.
2.
re
모듈의 주요 함수
re
모듈은 정규 표현식을 사용하여 문자열을 처리하는 다양한 함수를 제공합니다.
-
re.findall(pattern, string)
: 문자열에서 패턴과 일치하는 모든 부분 문자열을 리스트로 반환합니다. -
re.search(pattern, string)
: 문자열에서 패턴과 일치하는 첫 번째 부분 문자열을 찾아 Match 객체로 반환합니다. -
re.match(pattern, string)
: 문자열의 처음부터 패턴과 일치하는지 확인하고 Match 객체를 반환합니다. -
re.sub(pattern, repl, string)
: 문자열에서 패턴과 일치하는 부분 문자열을 repl로 대체합니다. -
re.split(pattern, string)
: 문자열을 패턴으로 분리하여 리스트로 반환합니다.
3. 정규 표현식 활용 예제















다음은
re
모듈을 사용하여 문자열을 처리하는 몇 가지 예제입니다.
1. 이메일 주소 추출
```python import re
text = "제 이메일 주소는 test@example.com입니다." email = re.findall(r'[\w.-]+@[\w.-]+.\w+', text) print(email) # ['test@example.com'] ```
2. 전화번호 추출
```python import re
text = "제 전화번호는 010-1234-5678입니다." phone = re.findall(r'\d{3}-\d{4}-\d{4}', text) print(phone) # ['010-1234-5678'] ```
3. 문자열 대체
```python import re
text = "파이썬은 강력한 프로그래밍 언어입니다." new_text = re.sub(r'파이썬', 'Python', text) print(new_text) # Python은 강력한 프로그래밍 언어입니다. ```
4. 문자열 분리
```python import re
text = "사과, 바나나, 딸기" fruits = re.split(r', ', text) print(fruits) # ['사과', '바나나', '딸기'] ```
4. 정규 표현식 활용 시 주의 사항
- 정규 표현식은 복잡할 수 있으므로 이해하기 어려울 수 있습니다.
- 정규 표현식은 잘못 사용하면 예상치 못한 결과를 초래할 수 있습니다.
-
re.compile()
함수를 사용하여 정규 표현식을 컴파일하면 성능을 향상시킬 수 있습니다.
5. 정규 표현식 학습 자료
정규 표현식은 파이썬에서 문자열을 처리하는 강력한 도구입니다. 위의 예제들을 참고하여 다양한 상황에 맞게 정규 표현식을 활용해 보세요.
자주하는질문(FAQ)
파이썬 정규 표현식: re 모듈을 이용한 문자열 검색 및 추출 FAQ
Q1. 정규 표현식이 뭔가요? 어떻게 사용하나요?
A:
정규 표현식 (Regular Expression)은 문자열 패턴을 표현하는 데 사용되는 특수 문자열입니다. 파이썬에서는
re
모듈을 사용하여 정규 표현식을 활용할 수 있습니다.
-
re.search(pattern, string)
: 문자열에서 패턴과 일치하는 부분이 있는지 확인하고, 있다면 일치하는 부분을 나타내는 Match 객체를 반환합니다. 없다면None
을 반환합니다. -
re.findall(pattern, string)
: 문자열에서 패턴과 일치하는 모든 부분을 리스트 형태로 반환합니다. -
re.sub(pattern, replacement, string)
: 문자열에서 패턴과 일치하는 부분을 replacement로 대체합니다.
예시:
```python import re
text = "My phone number is 123-456-7890" pattern = r"\d{3}-\d{3}-\d{4}"
match = re.search(pattern, text) if match: print(f"전화번호: {match.group(0)}")
phone_numbers = re.findall(pattern, text) print(f"전화번호 목록: {phone_numbers}")
new_text = re.sub(pattern, " - -****", text) print(f"변경된 문자열: {new_text}") ```
Q2. 특수 문자를 정규 표현식에서 어떻게 사용하나요?
A:
정규 표현식에서 특수 문자는 특별한 의미를 갖습니다. 예를 들어,
.
은 임의의 문자 하나를 나타내고,
*
는 앞 문자가 0번 이상 반복되는 것을 나타냅니다. 특수 문자를 그 자체로 사용하려면 백슬래시(
\
)로 이스케이프해야 합니다.
-
.
(점): 임의의 문자 하나와 매치 -
*
(별표): 앞 문자가 0번 이상 반복되는 것을 나타냄 -
+
(플러스): 앞 문자가 1번 이상 반복되는 것을 나타냄 -
?
(물음표): 앞 문자가 0번 또는 1번 반복되는 것을 나타냄 -
\d
: 숫자와 매치 -
\s
: 공백 문자와 매치 -
\w
: 문자, 숫자, 언더스코어와 매치
예시:
```python import re
text = "This is a test 123" pattern = r"\d+" # 숫자 하나 이상
numbers = re.findall(pattern, text) print(f"숫자 목록: {numbers}") ```
Q3. 정규 표현식으로 문자열을 어떻게 분리하나요?
A:
re.split(pattern, string)
함수를 사용하여 문자열을 정규 표현식으로 분리할 수 있습니다.
예시:
```python import re
text = "apple,banana,cherry" pattern = r","
fruits = re.split(pattern, text) print(f"과일 목록: {fruits}") ```
Q4. 정규 표현식에서 그룹을 어떻게 사용하나요?
A:
괄호(
()
)를 사용하여 정규 표현식에서 그룹을 만들 수 있습니다. 그룹은 패턴의 특정 부분을 나타내며,
Match
객체의
group()
메서드를 사용하여 그룹에 해당하는 문자열을 추출할 수 있습니다.
예시:
```python import re
text = "My email address is test@example.com" pattern = r"(\w+)@(\w+).(\w+)"
match = re.search(pattern, text) if match: print(f"사용자 이름: {match.group(1)}") print(f"도메인: {match.group(2)}") print(f"최상위 도메인: {match.group(3)}") ```
Q5. 정규 표현식에서 플래그를 어떻게 사용하나요?
A:
정규 표현식에서 플래그는 패턴의 매칭 방식을 수정하는 데 사용됩니다. 플래그는
re.search()
,
re.findall()
,
re.sub()
함수에 두 번째 인수로 전달됩니다.
-
re.IGNORECASE
: 대소문자 구분 없이 매칭합니다. -
re.MULTILINE
: 문자열을 여러 줄로 인식합니다. -
re.DOTALL
:.
이 줄 바꿈 문자(\n
)까지 매칭하도록 합니다.
예시:
```python import re
text = "Hello World!" pattern = r"world"
match = re.search(pattern, text, re.IGNORECASE) if match: print(f"일치하는 부분: {match.group(0)}") ```