[TIL] 정규 표현식 기본 간단 정리

yujeongkwon·2022년 1월 4일
0

TIL

목록 보기
1/9
post-thumbnail

정규 표현식(Regular Expressions)이란?

: 복잡한 문자열을 처리할 때 사용하는 기법

=> 정규식을 사용하면 간편, 간결하고 직관적인 코드 작성 O
==> python 에서는 정규 표현식을 지원하기 위해 re 모듈 사용 ( import re )

메타문자

메타문자 : 그 문자가 가진 본래의 뜻이 아닌 다른 특별한 용도로 사용하는 문자

문자클래스 []

: [ ] 사이의 문자들과 매치
(From - To) 를 나타내기 위해 보통 "-" 을 씀. EX) [A-Z] : 대문자 알파벳 모두
출처 : https://devkingdom.tistory.com/131

Dot .

: \n을 제외한 모든 문자와 매치
ex) a.b : a와 b라는 문자 사이에 어떤 문자라도 들어가면 모두 매치
but a[.]b : .은 메타 문자가 아니라 . 그 자체로의 문자 의미

반복

* : * 바로 앞에 있는 문자가 0번 이상 반복될 때 매치
+ : 최소 1번 이상 반복될 때 매치
    ex) ca+t : "c + a(1번 이상 반복) + t"
{m, n} : 반복 횟수가 m부터 n까지 매치 => ※ {1,}은 +와 동일하고, {0,}은 *와 동일하다.
    ex) ca{2}t : "c + a(반드시 2번 반복) + t"
		ca{2,5}t : "c + a(2~5회 반복) + t"

?

: 바로 앞에 있는 문자가 있어도 매치, 없어도 매치

|

: or 과 동일한 의미

^, \A

^ : 문자열의 맨 처음과 일치하면 매치
주의 ) 문자클래스 [] 안에 사용된다면 not과 동일한 의미
\A : re.MULTILINE 옵션을 사용할 경우 ^은 각 줄의 문자열의 처음과 매치되지만 \A는 줄과 상관없이 전체 문자열의 처음하고만 매치된다.

$, \Z

$ : 문자열의 끝과 일치하면 매치
\Z : re.MULTILINE 옵션을 사용할 경우 $ 메타 문자와는 달리 전체 문자열의 끝과 매치된다.

\b, \B

\b : \b는 단어 구분자(Word boundary) (띄어쓰기!)
\B : \b 메타 문자와 반대의 경우이다. 즉 whitespace로 구분된 단어가 아닌 경우에만 매치된다.


정규식을 이용한 문자열 검색


  • match() : 문자열의 처음부터 정규식과 매치되는지 조사한다.

  • search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.

  • finditer() : 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다.

    	=> 매치되면 객체를 돌려주고 , 안되면 None를 돌려줌 ( if문에서 자주 쓰임 )
  • findall() : 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.

    	=> 매치되면 리스트를 돌려준다.

match 객체의 메서드


  • group() : 매치된 문자열을 돌려준다.
  • start() : 매치된 문자열의 시작 위치를 돌려준다.
  • end() : 매치된 문자열의 끝 위치를 돌려준다.
  • span() : 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려준다.

모듈 단위로 수행

p = re.compile('[a-z]+')
m = p.match("python")

위 코드가 축약된 형태는 다음과 같다.

m = re.match('[a-z]+', "python")

위 예처럼 사용하면 컴파일과 match 메서드를 한 번에 수행할 수 있다. 보통 한 번 만든 패턴 객체를 여러번 사용해야 할 때는 이 방법보다 re.compile을 사용하는 것이 편하다.

문자열 바꾸기


sub 메서드

str = re.sub( ' 바꿀 문자열 ',' 대상 문자열 ' , " 원문자열 ")
str
= re.sub( ' 바꿀 문자열 ',' 대상 문자열 ', count= 바꾸기 횟수, " 원문자열 ")

ex) 프로그래머스 - 신규 아이디 추천

import re

new_id = "...!@#*..y.abcdefghijklm"
new_id = re.sub('[^\w\-_.]','',new_id)

#출력 .....y.abcdefghijklm

출처 : 점프 투 파이썬

profile
인생 살자.

0개의 댓글