정규표현식

괴도소녀·2021년 7월 2일
0

공부정리함

목록 보기
8/13

정규표현식이 자꾸 헷갈리고, 봐도봐도 까먹는(물론 나의 머리 때문이지만.) 나를 위해 정리를 하기로 결심하였다.
일단 정규표현식에 대해 간단히 정의해 보자.
정규표현식은 우리가 찾고자 하는 문자열 패턴을 정의하여, 기존 문자열과 일치하는지를 비교하는 것이다.

간단하게 코드로 예시를 보여주자면 밑에와 같다.

[코드]

import re

sample = "I am the Iron man"
sample_extract = re.sub("Iron", "Bat", sample)
print(sample_extract)

[결과]
I am the Bat man


정규표현식의 사용은 2가지 있다.

설명요약
찾고자 하는 문자열의 패턴을 정의한다.complie 과정이다.
정의된 패턴과 매칭되는 것을 찾아 다양한 처리를 한다.complie된 객체를 이용하여 다른 문자열에서 검색을 수행한다.

[코드]

complie_pattern = re.compile('back')
complie_pattern.findall("backstreet, backache, front, frontdesk")

[결과]
['back', 'back']

근데 솔직히 누가 저렇게 복잡하게 할까요... 저는 그냥 한줄이 편하더라고요.
밑에 코드처럼요.

re.findall("back","backstreet, backache, front, frontdesk")

메소드

정규표현식 패키지인 re 메소드들에 대해 조금 정리해본다.

메소드설명
re.match()"문자열의 처음"부터 시작하여 패턴이 일치되는 것이 있는지를 확인한다.
re.search()re.match()와 비슷하지만, 반드시 문자열의 처음부터 일치해야 하는 것은 아니다.
re.findall()문자열 중 패턴과 일치되는 모든 부분을 찾는다.
re.finditer()re.findall()과 비슷하지만, 일치된 문자열의 리스트 대신 matchObj 리스트를 반환한다
split()우리가 정한 패턴으로 나눈다. 공백으로 두면 ' '한칸 띄어쓰기가 default이다.
sub()일치하는 패턴으로 대체하기
re.fullmatch()re.fullmatch()는 패턴과 문자열이 남는 부분 없이 완벽하게 일치하는지를 검사한다.

메소드들이 많아서, 그만 정리하고 싶다...
찾아보는게 더 빠를 듯 하다...


패턴

특수문자 혹은 메타문자라고 부른다.
[]. -. . ? * + {} / 등을 이용해 특수한 패턴을 만든다.

특수문자설명
[ ]문자
-범위
.하나의 문자
?0회 또는 1회 반복
*0회 이상 반복
+1회 이상 반복
^입력의 시작 부분에 대응. 예를 들어, /^A/ 는 "an A" 의 'A'와는 대응되지 않습니다, 그러나 "An E" 의 'A'와는 대응됩니다.
{m, n}m ~ n
\d숫자
\D숫자X
\w알파벳 문자
\W알파벳X 문자
\s공백 문자
\S공백X 문자
\b단어 경계
\BX단어 경계
$입력의 끝 부분과 대응. 예를 들어, /t$/ 는 "eater" 의 't'에는 대응되지 않습니다, 그러나 "eat" 과는 대응됩니다.

예를들어, 이메일의 정규표현식 패턴은 [0-9a-zA-Z]+@[0-9a-z]+\.[0-9a-z]+ 이다.
이런식으로 회원가입이나 사용자가 우리가 규정한 패턴에 알맞게 작성했는가를 확인할때도 정규표현식을 종종쓴다.
물론! 활용분야는 무궁무진....ㅠ


참고 사이트

정규표현식 MDN 사이트

0개의 댓글