본문 바로가기
프로그래밍/Python 관련 정보

[Python Programming 기초] 정규표현식/Wild card

by 물박사의 저장공간 2024. 10. 25.

regular expression은 문자열의 패턴을 잡아내어 추출하는 데 사용됩니다. 예를 들어 문자열 중 숫자만 뽑아 온다든가 알파벳만 뽑아온다든가 아니면 'student'를 포함하고 있는 문자열만 추출한다든지 하는 방식으로 활용할 수 있습니다. 

 

메타 문자 설명 예시
. 임의의 한 문자(줄바꿈 제외) a.ba+b, a_b와 매칭
^ 문자열의 시작 ^abcabc로 시작하는 문자열과 매칭
$ 문자열의 끝 abc$abc로 끝나는 문자열과 매칭
* 바로 앞 문자가 0번 이상 반복 a*a가 0번 이상 나타나는 경우와 매칭
+ 바로 앞 문자가 1번 이상 반복 a+a가 1번 이상 나타나는 경우와 매칭
? 바로 앞 문자가 0번 또는 1번 나타남 a?a가 0번 또는 1번 나타나는 경우와 매칭
[] 문자 클래스. 내부의 문자 중 하나와 매칭 [abc]a, b, c 중 하나와 매칭
| OR 연산자. 둘 중 하나와 매칭 a|ba 또는 b와 매칭
() 그룹화. 괄호 안의 패턴을 그룹으로 처리 (abc)abc와 매칭
\d 숫자와 매칭(0-9) \d는 숫자와 매칭
\w 알파벳, 숫자, 밑줄과 매칭 \w[a-zA-Z0-9_]와 매칭
\s 공백 문자와 매칭(스페이스, 탭, 줄바꿈) \s는 공백 문자와 매칭
\b 단어 경계 \bword\b는 단어 word와 매칭

 

1) re.search()

result = re.search(r'abc', 'xyzabcdef')
print(result.group())  # 출력: 'abc'

 

2) re.sub()

result = re.sub(r'\d+', '#', 'My number is 1234')
print(result)  # 출력: 'My number is #'

 

예를 들어,

이메일 주소를 추출하고 싶다면

email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
emails = re.findall(email_pattern, 'Contact: test@example.com, admin@domain.co.kr')
print(emails)  # 출력: ['test@example.com', 'admin@domain.co.kr']

 

전화번호를 추출하고 싶다면

phone_pattern = r'\d{3}-\d{3,4}-\d{4}'
phones = re.findall(phone_pattern, 'Call me at 123-456-7890 or 987-6543-2100')
print(phones)  # 출력: ['123-456-7890', '987-6543-2100']

와 같이 쓰는 식입니다. 사실 저도 정규표현식이 워낙 다양하고 기능이 많아서 다 기억하고 있지는 않습니다. 다만, 정규표현식을 썼을 때 어떤식으로 실제 추출하는지는 여러 웹페이지에서 확인하는 것이 가능한데요. 대표적으로 아래와 같은 사이트에서 확인해 볼 수 있습니다. 

 

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com