코딩 테스트를 보면서 정규식을 알았다면 간단하게 해결될 수 있는 문제를 푼 적이 꽤 있다.
하지만 너무 어려울 것 같아 미루던 정규식을 스터디를 기회로 조금이라도 공부해보고자 한다.
전부를 알 수는 없기 때문에 이번에는 스터디 문제에서 해결했던 아이디어 위주로 알아보자!
정규 표현식(Regular Expressions): 복잡한 문자열을 처리할 때 사용하는 기법으로, 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용
1. 메타 문자
. ^ $ * + ? { } [ ] \ | ( )
1) 문자 클래스 [ ]
"[ ] 사이의 문자들과 매치"라는 의미
- [a-zA-Z] : 알파벳 모두
- [0-9] : 숫자
2) ^
이 문자를 헷갈리지 않고 사용해야 된다.
- [^0-9] : 문자 클래스 안에서는 ^는 not(반대)의 의미를 가진다.
- 그래서 이건 숫자가 아닌 것과 매치하는 정규식이다.
- ^[A-Z] : 문자열의 제일 처음과 매치하는 정규식이다.
- ^는 뒤에 있는 문자에 영향을 주어 그 문자로 시작되면 매치된다.
- 그래서 이건 문자로 시작하는 것과 매치하는 정규식이다.
두 가지 경우가 다른 의미로 쓰인다.
3) * 반복
이 정규식에는 반복을 의미하는 * 메타 문자가 사용되었다. 여기에서 사용한 *은 * 바로 앞에 있는 문자 a가 0부터 무한대로 반복될 수 있다는 의미이다.
4) + 반복
반복을 나타내는 또 다른 메타 문자로 +가 있다. +는 최소 1번 이상 반복될 때 사용한다. 즉 *가 반복 횟수 0부터라면 +는 반복 횟수 1부터인 것이다.
5) 반복 ({m,n}, ?)
- {m} : 반드시 m번 반복
- {m,n} : m~n회 반복
- ? : {0, 1}
* ^는 문자열의 처음을 의미하고, $는 문자열의 마지막을 의미한다.
2. re 모듈
import re
p = re.compile('ab*')
re.compile을 사용하여 정규 표현식(위 예에서는 ab*)을 컴파일한다. re.compile의 결과로 돌려주는 객체 p(컴파일된 패턴 객체)를 사용하여 그 이후의 작업을 수행할 것이다.
3. 문자열 검색
1) match
: 문자열의 앞 부분이 매치되는가를 체크
- 정규식에 부합되므로 match 객체를 돌려준다.
- 부합되지 않으므로 None을 돌려준다.
p = re.compile(정규표현식)
m = p.match( 'string goes here' )
if m:
print('Match found: ', m.group())
else:
print('No match')
이제 정규식 활용해볼까?
4. 문제 풀이
[백준, 실버3] 9342번: 염색체
https://www.acmicpc.net/problem/9342
t = int(input())
p = re.compile('^[A-F]?A+F+C+[A-F]?$')
for _ in range(t):
word = input()
m = p.match(word)
if m:
print('Infected!')
else:
print('Good')
📌 Reference
내가 작성한 개념은 문제 풀이에 필요한 내용을 중심으로 기록되었기 때문에 자세한 내용은 해당 글을 참고하자!
반응형
'Computer Science > 프로그래밍 언어' 카테고리의 다른 글
[Oracle] 날짜 데이터 가지고 놀기 📆 (4) | 2023.11.22 |
---|---|
[Oracle] 🚂 쿼리 열차 출발합니다~ 시간대 별로 데이터 개수 세기 (2) | 2023.11.06 |
[SQL/Programmers] GROUP BY (1) | 2022.09.29 |
[SQL/Programmers] 집계함수 | MAX, MIN, COUNT, SUM, AVG, STDDEV, VARIAN (0) | 2022.08.15 |
댓글