정규표현식 활용 기초
🌟 12강: 정규표현식 활용 기초 - 코딩 마법사 되기 대작전!
안녕하세요, 코딩 초보 모험가 여러분! 오늘은 마법의 세계로 여러분을 안내할 예정입니다. 바로 정규표현식(Regular Expression)의 세계예요! 🧙♂️✨ 이 마법을 배우면 텍스트 데이터를 다루는 데 있어 엄청난 힘을 얻게 될 거예요. 자, 이제 시작해볼까요?
정규표현식이란? - 마법의 마법 지팡이
정규표현식은 문자열 검색과 조작을 위한 강력한 도구입니다. 쉽게 말해, 이 마법 지팡이로 텍스트 속에서 특정 패턴을 찾아내거나 바꿀 수 있어요. 예를 들어, 이메일 주소, 전화번호, 날짜 형식 등을 자동으로 검증하거나 수정할 수 있답니다.
기본 패턴들 - 마법의 주문
1. . (점)
- 기능: 어떤 문자든 하나를 나타냅니다.
- 예제:
cat과cats를 찾고 싶다면ca.s를 사용하세요.import re text = "이것은 cat과 cats입니다." matches = re.findall(r'ca\.s', text) print(matches) # 출력: ['cats']- 설명:
.은 점 하나를 나타내므로ca.s는cats를 찾아냅니다..대신c를 사용하면cat만 찾아집니다.
- 설명:
2. * (별표)
- 기능: 바로 앞의 패턴이 0번 이상 반복됩니다.
- 예제: 여러 번 반복되는 문자 패턴 찾기 (예: “aaabbbccc”).
import re text = "aaabbbccc ddd aaa" matches = re.findall(r'a+b+c+', text) print(matches) # 출력: ['aaabbbccc', 'aaa']- 설명:
a+,b+,c+각각 문자가 한 번 이상 반복되는 패턴을 찾아냅니다.*덕분에 여러 번 반복되는 문자열도 정확히 잡아낼 수 있어요!
- 설명:
3. ^ (캐리지 기호)
- 기능: 문자열의 시작을 나타냅니다.
- 예제: 문자열의 시작 부분에서 특정 패턴 찾기 (예: “apple”로 시작하는 문자열).
import re text = "apple pie apple juice" matches = re.findall(r'^apple', text) print(matches) # 출력: ['apple pie', 'apple juice']- 설명:
^는 문자열이 시작될 때 해당 패턴을 찾습니다. 여기서는 모든 행이 “apple”로 시작하므로 해당 패턴이 여러 번 매칭됩니다. 단, 정확히 문자열이 “apple”로 시작하는 경우만 찾으려면r'^apple '와 같이 공백을 추가하는 것이 좋습니다.
- 설명:
실전 활용 - 마법의 실전 훈련
예제 1: 이메일 검증
- 목표: 유효한 이메일 주소 찾기
- 코드:
import re def validate_email(email): # 이메일 패턴 정의 pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' if re.match(pattern, email): return True else: return False # 테스트 이메일들 emails = ["test@example.com", "invalid-email", "user@domain.co"] for email in emails: print(f"'{email}' 유효한 이메일: {validate_email(email)}")- 설명: 이메일 주소는
@기호와 도메인 부분으로 구성되어야 하며, 문자, 숫자, 일부 특수 문자를 허용합니다.re.match는 문자열의 시작부터 패턴을 검사합니다.
- 설명: 이메일 주소는
예제 2: 전화번호 형식 검증
- 목표: 특정 형식의 전화번호 검증 (예: +82-10-XXXXXXX)
- 코드:
import re def validate_phone(phone): # 전화번호 패턴 정의 pattern = r'^\+82-\d{2}-\d{5}$' if re.match(pattern, phone): return True else: return False # 테스트 전화번호들 phones = ["+82-10-1234567", "+82-10-1234", "+1-123-456-7890"] for phone in phones: print(f"'{phone}' 유효한 전화번호: {validate_phone(phone)}")- 설명:
\d는 숫자를 의미하고,-와+를 포함하여 정확한 형식을 검사합니다.^\d+는 문자열의 시작에서 숫자로 시작해야 함을 나타냅니다.
- 설명:
예제 3: URL 추출
- 목표: 웹 페이지에서 URL 추출
- 코드:
import re def extract_urls(text): # URL 패턴 정의 pattern = r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+' urls = re.findall(pattern, text) return urls sample_text = "여기에는 https://example.com과 http://test.site가 있습니다." print("추출된 URL들:", extract_urls(sample_text))- 설명: 이 패턴은 HTTP/HTTPS 프로토콜을 가진 URL을 찾습니다. 다양한 문자와 특수 문자를 포함하여 실제 웹사이트 URL을 정확히 잡아냅니다.
💡 초보자 폭풍 질문! 💡
질문: 정규표현식을 사용할 때 가장 어려운 부분은 무엇인가요?
- 답변: 많은 초보자들이 특정 패턴 매칭이나 복잡한 조건을 이해하는 데 어려움을 겪습니다. 하지만 기본 패턴들을 하나씩 익혀가며 다양한 예제를 직접 코딩해보는 것이 가장 효과적인 방법입니다. 연습이 답이죠! 🔮
🚨 실무주의보 🚨
주의사항: 정규표현식은 강력하지만, 복잡한 패턴은 가독성을 떨어뜨릴 수 있습니다. 유지보수를 위해 명확하고 간결한 패턴을 사용하는 것이 중요합니다. 또한, 대규모 프로젝트에서는 성능 최적화를 위해 정규표현식 사용을 신중하게 고려해야 합니다.
오늘 배운 내용으로 코딩 마법사가 되어가는 여정을 즐기세요! 더 많은 질문이나 추가 예제가 필요하시면 언제든지 물어보세요. 함께 성장해봅시다! 🌟✨
<hr>