728x90
반응형
이 파이썬 프로그램은 다양한 정규식 예제를 포함하고 있습니다.
import re
import unittest
# 3.1 이메일 유효성 검사
def is_valid_email(email):
"""
이메일 주소의 유효성을 검사합니다.
"""
pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'
return re.match(pattern, email) is not None
# 3.2 전화번호 추출
def extract_phone_numbers(text):
"""
주어진 텍스트에서 전화번호를 추출합니다.
"""
pattern = r'\b\d{3}[-.\s]?\d{3}[-.\s]?\d{4}\b'
return re.findall(pattern, text)
# 3.3 URL 매칭
def find_urls(text):
"""
주어진 텍스트에서 URL을 찾습니다.
"""
pattern = r'(https?://[^\s]+)'
return re.findall(pattern, text)
# 3.4 날짜 형식 찾기
def find_dates(text):
"""
주어진 텍스트에서 날짜 형식을 찾습니다.
"""
pattern = r'\b\d{2}[/-]\d{2}[/-]\d{4}\b'
return re.findall(pattern, text)
# 4.1 그룹과 캡처
def extract_username(email):
"""
이메일 주소에서 사용자 이름을 추출합니다.
"""
pattern = r'^([\w\.-]+)@[\w\.-]+\.\w+$'
match = re.match(pattern, email)
if match:
return match.group(1)
return None
# 4.2 전방 탐색과 후방 탐색
def find_numbers_followed_by_unit(text):
"""
단위가 뒤따르는 숫자를 찾습니다.
예: '100kg', '20m'
"""
pattern = r'\d+(?=kg|m|cm)'
return re.findall(pattern, text)
# 6.1 유닛 테스트
class TestRegexFunctions(unittest.TestCase):
def test_is_valid_email(self):
self.assertTrue(is_valid_email("test@example.com"))
self.assertFalse(is_valid_email("test@.com"))
def test_extract_phone_numbers(self):
text = "Call me at 123-456-7890 or 098 765 4321."
self.assertEqual(extract_phone_numbers(text), ["123-456-7890", "098 765 4321"])
def test_find_urls(self):
text = "Visit https://www.example.com or http://test.org for more info."
self.assertEqual(find_urls(text), ["https://www.example.com", "http://test.org"])
def test_find_dates(self):
text = "Important dates are 01/01/2020 and 12-31-2021."
self.assertEqual(find_dates(text), ["01/01/2020", "12-31-2021"])
def test_extract_username(self):
self.assertEqual(extract_username("user.name@example.com"), "user.name")
self.assertIsNone(extract_username("invalid-email.com"))
def test_find_numbers_followed_by_unit(self):
text = "Weights are 100kg and 200kg, lengths are 20m and 30cm."
self.assertEqual(find_numbers_followed_by_unit(text), ["100", "200", "20", "30"])
if __name__ == "__main__":
# 유닛 테스트 실행
unittest.main(argv=[''], exit=False)
먼저, 이메일 유효성 검사를 위한 is_valid_email 함수는 이메일 형식을 확인합니다.
extract_phone_numbers 함수는 주어진 텍스트에서 전화번호를 찾아내고, find_urls 함수는 텍스트 내의 URL을 검색합니다. find_dates 함수는 텍스트에서 날짜 형식(MM/DD/YYYY 또는 DD-MM-YYYY)을 찾아냅니다.
그 다음으로, extract_username 함수는 이메일 주소에서 사용자 이름 부분을 추출하며, find_numbers_followed_by_unit 함수는 단위(kg, m, cm 등)가 뒤따르는 숫자를 찾아냅니다.
마지막으로, unittest 모듈을 사용하여 각 함수의 동작을 검증하는 유닛 테스트를 작성하였습니다. TestRegexFunctions 클래스 내의 각 테스트 메서드는 해당 함수가 올바르게 동작하는지 확인합니다. 프로그램의 메인 블록에서는 유닛 테스트가 실행되어 모든 테스트가 통과하는지 확인하게 됩니다.
728x90
반응형
'개발 지식' 카테고리의 다른 글
java 정규식 패턴 예시 (0) | 2025.04.12 |
---|---|
javascript 정규식(RegEx) 패턴 예시 모음 (0) | 2025.04.09 |