74 lines
3.1 KiB
Markdown
74 lines
3.1 KiB
Markdown
# 정규표현식
|
|
|
|
정규 표현식은 특정한 규칙(패턴)을 가진 문자열을 찾아내기 위한 표현 방식입니다. 텍스트 데이터를 처리할 때 특정 문자열을 검색하거나, 문자열을 추출하거나, 문자열을 변환하는 등 다양한 작업에 활용됩니다. 예를 들어, 이메일 주소, 전화번호, 특정 형식의 로그 데이터 등을 찾아내는 데 사용됩니다.
|
|
|
|
## 정규 표현식의 구성 요소
|
|
* 메타 문자: 일반 문자가 아닌 특별한 의미를 가지는 문자입니다. 예를 들어, `.`은 임의의 한 문자를 의미하고, `*`은 앞의 문자가 0번 이상 반복되는 것을 의미합니다.
|
|
* 특수 시퀀스: `\d` (숫자), `\s` (공백), `\w` (단어 문자) 등 특정 문자 집합을 나타내는 시퀀스입니다.
|
|
* 문자 클래스: `[abc]` 와 같이 대괄호 안에 포함된 문자 중 하나를 의미합니다.
|
|
|
|
### 메타 문자
|
|
* `.`: 임의의 한 문자
|
|
* `^`: 문자열의 시작
|
|
* `$`: 문자열의 끝
|
|
* `*`: 앞의 문자가 0번 이상 반복
|
|
* `+`: 앞의 문자가 1번 이상 반복
|
|
* `?`: 앞의 문자가 0번 또는 1번 반복
|
|
* `{m,n}`: 앞의 문자가 최소 m번, 최대 n번 반복
|
|
* `[abc]`: a, b, c 중 하나의 문자
|
|
* `[^abc]`: a, b, c를 제외한 문자
|
|
|
|
## 정규 표현식 예시
|
|
* `\d{3}-\d{4}-\d{4}`: 전화번호 형식 (예: 010-1234-5678)
|
|
* `\w+@\w+\.\w+`: 이메일 주소 형식 (예: [이메일 주소 삭제됨])
|
|
* `<[^>]+>`: HTML 태그 추출
|
|
* `^http://`: http://으로 시작하는 문자열
|
|
|
|
## re 모듈
|
|
|
|
re 모듈은 파이썬에서 정규 표현식을 사용하여 문자열을 검색, 치환, 분할하는 등 다양한 작업을 수행할 수 있도록 지원하는 표준 라이브러리입니다.
|
|
|
|
* 패턴 매칭: 주어진 문자열에서 정규 표현식과 일치하는 부분을 찾습니다.
|
|
* 문자열 치환: 일치하는 부분을 다른 문자열로 바꿉니다.
|
|
* 문자열 분할: 정규 표현식을 기준으로 문자열을 분할합니다.
|
|
|
|
```python
|
|
import re
|
|
|
|
text = "The phone number is 415-555-1212."
|
|
pattern = "\d{3}-\d{3}-\d{4}"
|
|
|
|
# 검색
|
|
match = re.search(pattern, text)
|
|
if match:
|
|
print(match.group()) # 출력: 415-555-1212
|
|
|
|
# 모든 일치하는 부분 찾기
|
|
all_matches = re.findall(pattern, text)
|
|
print(all_matches) # 출력: ['415-555-1212']
|
|
|
|
# 치환
|
|
new_text = re.sub(pattern, "XXX-XXX-XXXX", text)
|
|
print(new_text) # 출력: The phone number is XXX-XXX-XXXX.
|
|
```
|
|
|
|
### 주요 함수
|
|
* `re.search(pattern, string)`: 문자열 전체에서 패턴을 찾아 첫 번째 매칭 객체를 반환합니다.
|
|
* `re.findall(pattern, string)`: 문자열에서 패턴과 일치하는 모든 부분을 리스트로 반환합니다.
|
|
* `re.sub(pattern, repl, string)`: 문자열에서 패턴과 일치하는 부분을 다른 문자열로 치환합니다.
|
|
* `re.compile(pattern)`: 정규 표현식을 컴파일하여 패턴 객체를 생성합니다.
|
|
|
|
```python
|
|
import re
|
|
|
|
# 정규 표현식 컴파일
|
|
pattern = re.compile(r'\d+') # 숫자만 추출하는 패턴
|
|
|
|
# 문자열 검색
|
|
text = "The price is $19.99"
|
|
match = pattern.search(text)
|
|
if match:
|
|
print(match.group()) # 출력: 19.99
|
|
```
|
|
|