본문 바로가기
Computer Science/프로그래밍 언어

[Python] 정규 표현식 (Regular Expressions)

by HelloJudy 2022. 10. 3.

코딩 테스트를 보면서 정규식을 알았다면 간단하게 해결될 수 있는 문제를 푼 적이 꽤 있다.
하지만 너무 어려울 것 같아 미루던 정규식을 스터디를 기회로 조금이라도 공부해보고자 한다.
전부를 알 수는 없기 때문에 이번에는 스터디 문제에서 해결했던 아이디어 위주로 알아보자!


정규 표현식(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

 

9342번: 염색체

상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (A, B, C, ..., Z)로만 이루어진 문자열이다. 상근이는 각 염색체가 다음과 같은 규칙

www.acmicpc.net

 

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


내가 작성한 개념은 문제 풀이에 필요한 내용을 중심으로 기록되었기 때문에 자세한 내용은 해당 글을 참고하자!

반응형

댓글