본문 바로가기
카테고리 없음

Python - Regex 앞/뒤 조건 이해(Lookahead, Lookbehind)

by 올엠 2024. 3. 19.
반응형

Regex를 이용해서 정규식을 사용할 때 오탐이 많은 경우 사용하기 유용한 앞/뒤 조건 (Lookahead, Lookbehind)건에 대해 정리를 해보고자가 한다. (?)를 이용해서 <를 통해 앞과 뒤를 구분할 수 있다는 점에서 강력하면서도 좋은 정규식을 사용할 수 있도록 도와준다.

이를 이해를 쉽게 하기 위해서는 패턴 이 있고, 이후 앞/뒤에 조건을 거는 방식이라는 점을 명심하자.

여기에서는 주민등록 번호를 예로 들어보도록 하겠다.

 

앞쪽 조건(lookahead)

앞쪽 조건(lookahead)는 가장 뒤에 작성을 하는데, 이유는 해당 식의 앞에 나오는 패턴들의 뒤쪽 조건을 보겠다는 의미을 설정하기 때문이다. 따라서 가장 뒤에 작성하면 된다.

xxxx(?=Y) Positive lookahead(같은것) xxxx 이후 Y와 같은 것만
xxxx(?!Y) Negative lookahead(같지 않은것) xxxx 이후 Y와 같지 않은 것만

뒤쪽 조건(Lookbehind)

Lookbehind 는 앞쪽 조건에 해당한다. 즉 조건을 입력한 위치에 뒤에 나오는 패턴앞쪽 조건을 보겠다는 의미로 해석하면 된다.

그리고  <로 표현한다.

(?<=Y)xxxx Positive lookbehind(같은것) Y 이후 xxxx와 같은 것만
(?<!Y)xxxx Negative lookbehind(같지 않은것) Y 이후 xxxx와 같지 않은 것만

 

 

예를 들어 아래와 같이 특정 주민등록번호를 탐지하고자 할때, 앞뒤로 Lookahead, Lookbehind가 숫자가 아닌것으로 진행하면,

(?<!\d)([0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))[-, ]{0,1}[1-4][0-9]{6}(?!\d)

 

숫자 이외에는 정상적으로 허용하게 된다. 

반응형