공부한 내용 정리하는 공간입니다.
틀린 내용이 있을 수 있습니다.
모든 지적, 첨언 환영합니다.
오늘의 코드
1. 정규표현식으로 데이터 추출하기
2. 현재 날짜를 분리하여 출력하기
import re
text = "오늘은 2024년 5월 6일입니다."
pattern = re.compile(r"\d+")
matches = pattern.findall(text)
print(matches)
print("==========")
from datetime import datetime
print(datetime.now())
current_date = datetime.now().strftime("%Y-%m-%d")
date_pattern = re.compile(r'(\d{4})-(\d{2})-(\d{2})')
text = f"Today's date is {current_date}."
match = date_pattern.search(text)
if match:
print("Full match:", match.group(0))
year = match.group(1)
month = match.group(2)
day = match.group(3)
print("Year:", year)
print("Month:", month)
print("Day:", day)
else:
print("No date found in the text.")
정규 표현식
특정한 규칙을 가진 문자열을 찾거나, 대체하거나, 검증할 때 사용하는 문자열 패턴
원하는 규칙에 맞는 부분을 찾기 위한 검색 도구
메타 문자와 축약 표현식을 섞어서 사용
| 메타문자 | 의미 |
| . | \n을 제외한 모든 문자와 일치 |
| ? | 0회 또는 1회 등장하는 것과 일치 |
| * | 0개 이상 반복되는 것과 일치 |
| + | 1개 이상 반복되는 것과 일치 |
| \ | 메타문자를 일반 문자로 |
| | | 논리 OR, 둘 중 하나와 일치 |
| ^ | 문자열의 시작과 일치 |
| $ | 문자열의 끝과 일치 |
| {m,n} | m회 이상, n회 이하로 반복되는 것과 일치 |
| [ ] | 문자 집합, 내부 글자 중 하나와 일치 |
| ( ) | 내부의 정규식을 그룹으로 처 |
| 기존 표현식 | 축약 표현식 | 의미 | 일치 |
| [0-9] | \d | 숫자를 찾음 | 숫자 |
| [^0-9] | \D | 숫자가 아닌 것을 찾음 | 문자, 특수문자, 화이트 스페이스 |
| [\t\n\t\f\v] | \s | 화이트 스페이스인 것을 찾음 | 스페이스, 탭, 개행 |
| [^\t\n\r\f\v] | \S | 화이트 스페이스가 아닌 것을 찾음 | 문자, 특수문자, 숫자 |
| [a-zA-Z0-9] | \w | 문자+숫자를 찾음 | 문자, 숫자 |
| [^a-zA-Z0-9] | \W | 문자+숫자가 아닌 것을 찾음 | 특수문자, 공백 |
re.compile()
정규표현식 패턴을 컴파일하여 정규표현식 객체를 반환하는 함수
컴파일된 패턴은 여러 번 사용할 수 있음
정규표현식에서 백슬래시(\)를 그대로 사용하려면 큰따옴표 앞에 r을 붙어야 함
.findall()
주어진 문자열에서 정규표현식과 일치하는 모든 부분을 찾아 리스트로 반환하는 함수
일치하는 항목이 하나도 없으면 빈 리스트 반환
re.findall(정규표현식 패턴, 검색할 문자열) 또는 정규표현식 패턴.findall(검색할 문자열) 형태로 사용
datetime.now()
현재 시스템의 시간을 가져오는 함수
연도-월-일 시:분:초.마이크로초 형태로 반환
.strftime("%Y-%m-%d")
날짜와 시간을 문자열 형식으로 변환하는 함수
연도-월-일을 YYYY-MM-DD 형식으로 변환
.search()
주어진 문자열에서 정규표현식 패턴에 첫 번째로 일치하는 부분을 찾아 반환하는 함수
매칭할 부분이 없으면 None 반환
re.search(정규표현식 패턴, 검색할 문자열) 또는 정규표현식 패턴.search(검색할 문자열) 형태로 사용
반환된 객체에서 그룹화된 부분에 접근할 수 있음
.group()
정규표현식을 사용하여 매칭된 결과에서 그룹화된 내용을 추출하는 메서드
.group(0) : 매칭된 전체 문자열을 반환
.group(1), .group(2) : 그룹화된 부분을 순차적으로 반환
오늘의 코드
1. 정규표현식으로 데이터 추출하기
2. 현재 날짜를 분리하여 출력하기
import re
text = "오늘은 2024년 5월 6일입니다."
pattern = re.compile(r"\d+")
matches = pattern.findall(text)
print(matches)
print("==========")
from datetime import datetime
print(datetime.now())
current_date = datetime.now().strftime("%Y-%m-%d")
date_pattern = re.compile(r'(\d{4})-(\d{2})-(\d{2})')
text = f"Today's date is {current_date}."
match = date_pattern.search(text)
if match:
print("Full match:", match.group(0))
year = match.group(1)
month = match.group(2)
day = match.group(3)
print("Year:", year)
print("Month:", month)
print("Day:", day)
else:
print("No date found in the text.")
오늘의 코드 결과

오늘의 코드 설명
import re
re모듈 : 정규표현식을 처리하는 기능을 제공하는 표준 라이브러리
1. 정규표현식으로 데이터 추출하기
pattern = re.compile(r"\d+")
r"" : 문자열 내 이스케이프 문자를 있는 그대로 처리
\d : 숫자(0~9)
+ : 앞의 패턴이 1번 이상 반복되는 경우를 찾음
정규표현식을 컴파일(준비)해서 패턴 객체 생성
숫자가 1개 이상 연결된 부분을 찾는 패턴이 pattern에 저장
matches = pattern.findall(text)
text에서 pattern에 일치하는 모든 문자열을 리스트로 반환하여 matches에 저장
matches=['2024', '5', '6']
2. 현재 날짜를 분리하여 출력하기
from datetime import datetime
datetime 모듈의 datetime 클래스를 가져옴
날짜와 시간 관련 작업을 쉽게 처리하기 위한 클래스
print(datetime.now())
현재 날짜와 시간을 출력
current_date = datetime.now().strftime("%Y-%m-%d")
현재 날짜를 YYYY-MM-DD 형식의 문자열로 변환해서 current_date에 저장
date_pattern = re.compile(r'(\d{4})-(\d{2})-(\d{2})')
정규표현식 : (\d{4})-(\d{2})-(\d{2})
그룹화를 통해 매칭된 각 부분(연, 월, 일)을 분리해서 가져올 수 있음
패턴 객체 date_pattern 생성
text = f"Today's date is {current_date}."
match = date_pattern.search(text)
text="Today's date is 2025-01-14"
text에서 date_pattern과 일치하는 첫 번째 부분을 찾아서 match에 저장
정규표현식이 그룹화 되어있기 때문에 match에도 그룹화 되어서 저장
if match:
print("Full match:", match.group(0))
year = match.group(1)
month = match.group(2)
day = match.group(3)
print("Year:", year)
print("Month:", month)
print("Day:", day)
match가 true일 때 실행
text에서 date_pattern과 일치하는 부분이 있으면 match에 값이 저장되어 true
text에서 date_pattern과 일치하는 부분이 없으면 match에 None이 저장되어 false
>match.group(0)=2024-01-14
>match.group(1)=첫 번째 그룹=2025
>match.group(2)=두 번째 그룹=01
>match.group(3)=세 번째 그룹=14
else:
print("No date found in the text.")
match가 false일 때 "No date found in the text" 출력