TIL 018 | regex #1

This Is Empty.·2021년 9월 5일
0

TIL

목록 보기
18/23
post-thumbnail

알고리즘을 풀면서 자주 봤었던 regex... regex만 잘써도 내 알고리즘의 길이가 절반쯤은 줄어들 것 같고, 아직 풀지 못한 문제도 접근이 가능할 것 같다. 두려워 하지말고 천천히 정리해보자🥲

regex ?

regex는 정규표현식(Regular Expression)으로 복잡한 문자열을 처리할때 사용한다. 파이썬에만 존재하는 고유 문법이 아닌, 문자열을 처리하는 모든 곳에서 사용할 수 있다.

파이썬에서 정규표현식을 사용하기 위해서는 re모듈을 사용한다.

메타 문자

메타 문자는 정규식에서 특별한 의미를 지니는 영문자가 아닌 문자다.

메타문자설명예제
*문자 또는 숫자가 0개 이상 나타남을 의미한다goo* == godness, goodness / != gdness
+문자가 1개 이상 나타남을 의미한다.goo+ == godness, gooodness / != godnesss
?? 앞에 있는 문자또는 그룹과 0개 또는 1개 일치한다12?3 == 123, 13
$문자열의 끝을 일치시킨다end$ == the end / != the ending
^문자열의 시작을 일치시킨다^serverity == serverity level / != The serverity level
.단일 문자를 일치시킨다b.at == baat, bBat / != bB4at
()소괄호 내의 문자를 문자 패턴으로 간주해야함을 나타낸다A(boo)+Z == AbooZ, AboobooZ / != AboZ, AboooZ
|파이프 왼쪽 또는 오른쪽 문자 중 하나를 일치시킨다A(B|C)D == ABD, ACD / != AD, ABCD
\뒤에 오는 메타문자를 일반 문자로 간주해야함을 나타낸다\ == / \? == ?
{m, }m개 이상의 선행하는 인스턴스를 일치시킨다Z{2,} == ZZ, ZZZ
{m}정확히 m개의 선행하는 인스턴스를 일치시킨다z{2} == zz / != zzz

참고
IBM | 메타 문자

최소 탐욕 또는 비탐욕 수량자

해당 메타 문자에 물음표(?)를 추가하여 최소 또는 비탐욕으로 설정할 수 있다.

탐욕적 수량자 : 가능한한 가장 큰 덩어리를 찾는다
비탐욕적 수량자 : 가장 근접한 최소의 덩어리를 찾는다

탐욕적 수량자비탐욕적수량자
**?
++?
{n,}{n,}?

참고
IBM | 최소또는비탐욕 수량자

대괄호 표현식

대괄호 표현식은 단일 문자나 조합 요소와 일치시키는데 사용할 수 있다.

표현식설명예제
[abcd]대괄호로 묶인 문자를 일치시킨다.[nN][oO] == no, nO, No, No / gr[ae]y == gray, grey
[a-d]하이픈으로 구분 된 문자 범위의 모든 문자를 일치시킨다[0-9] : 10진수 숫자 / [ab3-5] : a,b,3,4,5
[^abcd][^a-d]대괄호로 묶인 문자나 하이픈으로 구분된 문자 범위 밖의 문자를 일치시킨다[^0-9] : 숫자가 포함되지 않은 문자열을 일치시킨다
[.ab.]다중 문자 조합 요소를 일치시킨다[.ch.]는 다중 문자 조합 시퀀스 ch와 일치한다.
[=a=]요소 자체를 포함하여 해당 요소와 기본 정렬 순서가 동일한 모든 조합요소를 일치시킨다.[=e=] e및 현재 로케일에 있는 모든 e의 변형을 일치시킨다.

유의사항

  • ^ 는 열린 대괄호 뒤에 첫 번째 문자로 포함되는 경우에만 특별한 의미가 있고, 그렇지 않은 경우에는 일반 문자로 간주된다.
  • - 문자는 다음과 같은 경우에만 일반 문자로 간주된다.
    - - 가 대괄호 내에서 첫 번째 또는 마지막 문자일때 EX) [ab-] / [-xy]
    • 하이픈 문자가 유일한 문자일때 EX) [-]

참고
IBM | 대괄호 표현식

이스케이프 시퀀스

\(백슬래시)뒤에 문자가 숫자가 오는 조합을 이스케이프 시퀀스라고 한다

이스케이프 시퀀스설명
\\ 백슬래시, \
\'작은 따옴표, single quote, '
\"큰 따옴표, double quote, "
\a벨, ASCII Bell, BEL
\b백스페이스, ASCII Backspace, BS
\f폼피드, ASCII Formfeed, FF
\n새 줄, 개행 문자, ASCII Linefeed, LF
\r캐리지 리턴, ASCII Carrage Return, CR
\t가로 탭, ASCII Horizontal Tab, TAB
\ooo\뒤에 8진수 숫자를 지정하여 ASCII 코드의 문자 표현 ex) \141 == 'a'
\xhh\뒤에 16진수 숫자를 지정하여 ASCII 코드의 문자 표현 ex) \x61 == 'a'
\N{name}{} 안에 문자 이름을 지정하여 유니코드 문자 표현 ex) \N{LINE FEED
\uxxxx\뒤에 16비트 16진수 숫자를 지정하여 유니코드의 문자 표현 ex) \u0061 == 'a'
\Uxxxxxxxx\뒤에 32비트 16진수 숫자를 지정하여 유니코드의 문자 표현 ex) \U00000061 == 'a'
\<영숫자가 아닌 문자와 영숫자(밑줄 포함) 간의 경계로 정의된 단어의 시작 또는 ID의 시작을 일치시킨다. 문자가 아니라 컨텍스트를 일치시킨다
\b단어 경계를 일치시킨다. 영숫자 시퀀스의 시작이나 끝에 있는 빈문자열을 일치시킨다. 전체 단어만 검색을 사용한다
\B단어가 아닌 경계를 일치시킨다. 단어의 시작이나 끝에 있는 빈 문자열을 일치시킨다
\d10진수를 일치시킨다 == [0-9], [[:digit:]]
\D10진수가 아닌 문자를 일치시킨다. == [^0-9], [^[:digit:]]
\s공백 문자를 일치시킨다 == [ \t\n\r\f\v], [[:space:]]
\S공백이 아닌 문자를 일치시킨다 == [^ \t\n\r\f\v], [^[:space:]]
\w영숫자가 아닌 문자를 일치시킨다 == [^a-zA-Z0-9_], [^[:alnum:]_]
\[1-9]0이 아닌 단일 10진수 숫자 n이 뒤에 오는 \를 후면 참조라고 한다. n번째 괄호로 묶인 부속 표현식으로 일치된 동일한 문자세트를 일치시킨다
profile
Convinced myself, I seek not to convince.

0개의 댓글