정규식 정리 개념편

Yodi.Song·2021년 8월 31일
0

Python 정규식

정규 표현식

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

정규식 표현 사이트

메타 문자

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

. ^ $ * + ? { } [ ] \ | ( )

문자 클래스 [ ]

[ ] 사이의 문자들과 매치하는지 확인

[abc]
  • "abcabc" : 문자열에 a,b,c 있으므로 매치
  • "aqwer": 문자열에 a 있으므로 매치
  • "rtty": 문자열에 a,b,c 어떤것도 없으므로 매치 안함
- (하이픈) 사용
  • [a-zA-Z]:알파벳 모두
  • [0-9]: 숫자
^ (반대)

[ ] 안에 ^가 앞에 있으면 ^ 뒤에있는 것들이 들어가는 것들을 제외한다는 뜻이다.

  • [^0-9]: 숫자가 아닌 문자만 매치된다는 뜻

그 외의 것들

[자주 사용하는 문자 클래스]

[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다. 이렇게 자주 사용하는 정규식은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.

  • \d - 숫자와 매치, [0-9]와 동일한 표현식이다.
  • \D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
  • \s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
  • \S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
  • \w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
  • \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.

대문자로 사용된 것은 소문자의 반대임을 추측할 수 있다.

Dot(.)

정규 표현식의 Dot(.) 메타 문자는 줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨

이해를 돕기 위해 문자열 "aab", "a0b", "abc"가 정규식 a.b와 어떻게 매치되는지 살펴보자.

  • "aab"는 가운데 문자 "a"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
  • "a0b"는 가운데 문자 "0"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
  • "abc"는 "a"문자와 "b"문자 사이에 어떤 문자라도 하나는있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않는다.

반복 ( *)

* 바로 앞에 있는 문자 a가 0부터 무한대로 반복될 수 있다는 의미

정규식문자열Match 여부설명
ca*tctYes"a"가 0번 반복되어 매치
ca*tcatYes"a"가 0번 이상 반복되어 매치 (1번 반복)
ca*tcaaatYes"a"가 0번 이상 반복되어 매치 (3번 반복)

반복 (+)

+최소 1번 이상 반복될대 사용

정규식문자열Match 여부설명
ca+tctNo"a"가 0번 반복되어 매치되지 않음
ca+tcatYes"a"가 1번 이상 반복되어 매치 (1번 반복)
ca+tcaaatYes"a"가 1번 이상 반복되어 매치 (3번 반복)

반복 ({m,n}, ?)

반복 횟수를 3회만 또는 1회부터 3회까지 제한하고 싶을 경우

1. {m}

ca{2}t

위 정규식의 의미는 다음과 같다.

"c + a(반드시 2번 반복) + t"

위 정규식에 대한 매치여부는 다음 표와 같다.

정규식문자열Match 여부설명
ca{2}tcatNo"a"가 1번만 반복되어 매치되지 않음
ca{2}tcaatYes"a"가 2번 반복되어 매치

2. {m, n}

ca{2,5}t

위 정규식의 의미는 다음과 같다:

"c + a(2~5회 반복) + t"

위 정규식에 대한 매치여부는 다음 표와 같다.

정규식문자열Match 여부설명
ca{2,5}tcatNo"a"가 1번만 반복되어 매치되지 않음
ca{2,5}tcaatYes"a"가 2번 반복되어 매치
ca{2,5}tcaaaaatYes"a"가 5번 반복되어 매치

3. ?

반복은 아니지만 이와 비슷한 개념으로 ? 이 있다. ? 메타문자가 의미하는 것은 {0, 1} 이다.

다음 정규식을 보자.

ab?c

위 정규식의 의미는 다음과 같다:

"a + b(있어도 되고 없어도 된다) + c"

위 정규식에 대한 매치여부는 다음 표와 같다.

정규식문자열Match 여부설명
ab?cabcYes"b"가 1번 사용되어 매치
ab?cacYes"b"가 0번 사용되어 매치

즉 b 문자가 있거나 없거나 둘 다 매치되는 경우이다.

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

Method목적
match()문자열의 처음부터 정규식과 매치되는지 조사한다.
search()문자열 전체를 검색하여 정규식과 매치되는지 조사한다.
findall()정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.
finditer()정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다.

참고

0개의 댓글