문자열을 다룰 때 re module에서 findall함수를 쓰면 굉장히 쉽고 편하게 원하는 것을 찾을 수 있는데, 이 때 사용하는 정규 표현식에 대해 자주쓰는 기능들 위주로 정리를 해보려합니다.
예시를 먼저 들면 [abc] 라는 정규식이 있다면 ,문자열 'a' ,'b', 'c' 를 검색해서 찾아줍니다. 이때 연속한 문자 즉 [abc] 또는 [0123] 은 '-'문자를 사용해 [a-c] , [0-3]과 같이 표현할 수 있습니다.
자주쓰는 문자 클래스로는
인데 이때 [a-Z]라고 하지 않고 [a-zA-Z]로 나누어서 하는 이유는 문자를 찾는 기준이 아스키 코드(ASCll Table)인데
문자 'A'는 아스키코드로 65 'Z'는 아스키코드로 90, 'a'는 아스키코드로 97 ,'z'는 아스키코드로 122 이기 때문에, [a-Z]로 하면 애초에 문자 'a'의 아스키 코드가 'Z'보다 더 크기 때문에 오류가 나게 됩니다. 또한 순서를 고려해 [A-z]로 한다고 해도 'Z'와 'a'사이엔 91~96의 아스키코드가 포함되기 때문에, 다른 문자들도 같이 포함됩니다.(ex '[' 아스키코드 91)
또한 문자클래스안에 ^를 사용할 경우 반대라는 의미를 가지기 때문에 숫자가 아닌 모든 문자를 찾을 땐 [^0-9]와 작성하면 됩니다.
그외 자주사용하는 문자클래스
\n을 제외한 모든 문자와 매치되는것을 의미합니다. 예시로 바로 확인을 해보면
a.b 와 와같은 정규식이 있다면 이는 "a + 모든_문자 + b" 을 의미하며 예를들어 a로시작하고 b가 세번째들어가는 5자리의 문자를 검색하고 싶다면 a.b.. 와같이 됩니다. (만능키라고 생각하면 편함) 이때 사이에 진짜 '.'문자를 원한다면
[.]png, [.]jpg 등처럼 문자클래스를 이용해 사용할 수 있습니다.
다음은 *문자인데, 이는 반복을 의미하며 0번부터 무한대 까지 반복될수 있습니다.
역시 예시로 바로 확인해 보면 ca*b 라는 정규식이 있다면 ct,cat, caaaaat 등이 매치가 됩니다. ct는 a가 0번 반복되었기 때문이고 나머지 두문자 역시 a가n번 반복되기 때문에 매치되게 됩니다.
+문자는 거의 비슷한 문자인데 0번이 아닌 1번부터 무한대 까지 반복입니다, 위 예시들중 ct와 매치되지 않으며 나머지 예시와는 매치가 됩니다.
다음은 반복회수를 특정하게 정하는 {}문자 입니다. {m,n}처럼 나타내면 1회부터 3회반복이 되는 것이며, {m,}또는 {,n}처럼 생략하고 나타내면 m이상그리고 n이하라는 의미이고, {p} 처럼 ,가없으면 딱 p번 반복하는것과 매치한다는 의미입니다.
즉 *문자와 +문자 역시 각각{0,} . {1,}로 표현이 가능합니다.
이와 비슷한 문자로 ?문자가 있는데 이는 있어도 되고 없어도 된다는 뜻으로 {0,1} 문자와 동일한 의미입니다.
위 점프 투 파이썬 의 정규표현식 시작하기를 참고하여 포스팅하였습니다.