1. 정규표현식 종류 및 설명
패턴 | 설명 |
^ |
문자열의 시작을 의미한다. |
$ |
문자열의 끝을 의미한다. |
* |
앞 문자가 0번 이상 반복됨을 의미한다. |
+ |
앞 문자가 1번 이상 반복됨을 의미한다. |
? |
앞 문자가 0번 또는 1번 나타남을 의미한다. |
{n} |
앞 문자가 정확히 n번 반복됨을 의미한다. |
{n,m} |
앞 문자가 n번 이상 m번 이하로 반복됨을 의미한다. |
[] |
대괄호 안에 있는 문자 중 하나와 일치한다. |
\d |
숫자와 일치한다. [0-9] 와 동일하다. |
\D |
숫자가 아닌 문자와 일치한다. [^0-9] 와 동일하다. |
\s |
공백 문자와 일치한다. |
\S |
공백이 아닌 문자와 일치한다. |
\w |
문자 또는 숫자와 일치한다. [a-zA-Z0-9_] 와 동일하다. |
\W |
문자나 숫자가 아닌 문자와 일치한다. [^a-zA-Z0-9_] 와 동일하다. |
. | 임의의 한 문자와 일치한다. 줄바꿈 문자는 제외한다. |
2. 정규표현식 함수들 정리
1) re.compile()
정규표현식을 컴파일하여 패턴 객체로 만든다. 이렇게 생성된 패턴 객체는 여러 번 사용할 수 있어 효율적이다.
import re
pattern = re.compile(r'\d+') # 숫자에 대한 패턴 객체 생성
2) re.findall()
정규식에 일치하는 모든 문자열을 리스트로 반환한다. 이 함수는 문자열 내에 모든 매칭을 찾는 데 사용된다.
text = "오늘은 2024년 11월 19일입니다."
numbers = re.findall(r'\d+', text) # ['2024', '11', '19'] 반환
3) re.search()
정규식에 일치하는 첫 번째 항목을 찾아 매치 객체를 반환한다. 일치하지 않으면 None
을 반환한다. 이 함수는 특정 패턴이 존재하는지 여부를 검사하는 데 유용하다.
match = re.search(r'\d+', text) # <re.Match object; span=(4, 8), match='2024'> 반환
if match:
print(match.group()) # '2024'
4) re.split()
정규식을 기준으로 문자열을 분할하여 리스트로 반환한다. 여러 구분자를 동시에 사용할 수 있다.
tokens = re.split(r'\s+', text) # 공백을 기준으로 분할, ['오늘은', '2024년', '11월', '19일입니다.'] 반환
5) re.sub()
정규식에 일치하는 부분을 다른 문자열로 대체한다. 주로 데이터 변환이나 마스킹에 사용된다.
replaced_text = re.sub(r'\d+', '****', text) # '오늘은 ****년 ****월 ****일입니다.'로 변환
3. 각 함수 응용방법 추가
1) re.compile()
응용
re.compile()
을 사용하면 반복적으로 사용할 패턴을 객체로 만들어서 성능을 향상시킬 수 있다. 예를 들어 긴 텍스트에서 여러 번 매칭해야 하는 경우 패턴 객체를 재사용할 수 있다.
pattern = re.compile(r'\b\w+\b') # 단어 경계를 기준으로 모든 단어 찾기
words = pattern.findall(text) # ['오늘은', '2024년', '11월', '19일입니다'] 반환
2) re.findall()
응용
re.findall()
을 사용하여 특정 형식의 데이터를 추출할 수 있다. 예를 들어, 이메일 주소나 전화번호 등을 수집할 때 유용하다.
email_text = "문의는 example@test.com 또는 contact@domain.com으로 보내주세요."
emails = re.findall(r'[\w\.-]+@[\w\.-]+', email_text) # ['example@test.com', 'contact@domain.com'] 반환
3) re.search()
응용
re.search()
는 문자열에 특정 패턴이 포함되어 있는지 확인할 때 유용하다. 예를 들어 URL이 특정 프로토콜로 시작하는지 검사할 때 사용할 수 있다.
url = "https://www.example.com"
if re.search(r'^https?://', url):
print("유효한 URL입니다.") # URL이 http 또는 https로 시작하는지 확인
4) re.split()
응용
re.split()
을 사용하여 문자열을 특정 구분자를 기준으로 분리할 수 있다. 여러 구분자를 동시에 사용하는 정규식을 통해 다양한 형식의 구분자로 분리할 수 있다.
text = "사과, 오렌지; 바나나: 포도"
fruits = re.split(r'[;,:\s]+', text) # ['사과', '오렌지', '바나나', '포도'] 반환
5) re.sub()
응용
re.sub()
을 사용하면 개인 정보 보호를 위해 데이터 마스킹을 할 수 있다. 예를 들어 전화번호의 일부를 숨기는 경우에 유용하다.
phone_number = "010-1234-5678"
masked_number = re.sub(r'\d{4}$', '****', phone_number) # '010-1234-****'로 변환
'Programming > Python' 카테고리의 다른 글
[Python] 자원최적화 비동기 프로그래밍 적용하기 - Asyncio (0) | 2024.11.29 |
---|---|
[Pandas] 판다스 데이터프레임 컬럼 전처리, 함수 컬럼 적용 - apply, map (0) | 2024.11.24 |
[Python] 특정 경로 내의 파일 정보 가져오기 (파이썬 path 다루기) (0) | 2024.11.16 |
[Pandas] 파이썬 판다스 - 데이터프레임 열 추가하기 (0) | 2024.11.09 |
깊은 복사와 얕은 복사 - 파이썬 새로운 객체 만드는 방법 (0) | 2024.11.05 |