프로그래밍/Python

파이썬으로 정규표현식 다뤄보기 - 1

Dibrary 2022. 8. 24. 09:50
반응형

안녕하세요 Dibrary입니다.

알고리즘이나 데이터 로그를 확인할 때 가장 많이 접하는 것이 '문자열' 자료형인데요 이 문자열을 일일이 슬라이싱가지고 하면 생각보다 코드가 지저분해지거나 길어지는 경우가 많습니다.

이럴 때, 정규표현식을 써서 간단하게 할 수가 있는데 문제는 정규표현식은 '공부'를 좀 해야 한다는 것이죠..

(물론 해도 좀 까먹....)

 

암튼, 제가 간단하게 써먹기 편하다고 느낀것을 정리해보겠습니다.

 


1. match('패턴', '대상문자열')

match는 패턴으로 대상문자열을 비교해봅니다. 다만, 반드시 첫 번째부터 확인합니다.
이게 왜 중요하냐면, 곧 설명할 search와 굉장히 다른 결과를 내기 때문입니다.

첫 번째는 a가 hello에 있는지 맨 앞부터 비교하는데, a와 h는 다르기 때문에 None으로 나옵니다.
두 번째는 맨 앞과 일치하므로 해당 위치를 내보내고, 일치한다고 나오죠.
세 번째는 a와 비교하는 대상이 '공백'이므로 None으로 나옵니다.


2. search('패턴', '대상문자열')

search는 대상문자열 '전부'에서 확인합니다.

그리고, 일치하는 부분이 있으면 해당 부분의 첫번째 위치를 알려줍니다.

match를 사용해보았던 코드에서 match만 search로 바꿔 보았습니다. 
맨 밑에 출력이 match에서는 None이었는데, 지금은 1번째 위치에 a가 있다고 나오네요.


3. * 와 + 의 차이

*는 0개 이상인지를 확인하고, +는 1개 이상인지를 확인합니다.

여기서 0개 이상이라는 의미는 '아무것도 없어도 확인이 된다'는 의미 입니다. 이게 무슨말일지 확인해보겠습니다.

참고로 위 코드에서 [0-9]는 '숫자 0부터 9까지 중 아무거나' 라는 의미 입니다. 

첫 번째는 0~9까지 숫자 중 아무거나 *(0개 이상이면) 출력이 이뤄지겠죠? 보면, match라서 첫 번째와 비교하는데, 첫 번째 글자는 h라서 숫자가 아니지만 출력은 이뤄집니다. 대신 match가 ' '으로 나와서 일치하는 것이 없다고 알려준다.

두 번째는 0~9까지 숫자 중 아무거나 +(1개 이상이면) 출력이 이뤄진다는 의미입니다. match이므로 첫 번째가 반드시 하나라도 일치해야 하는데 h는 숫자가 아니므로 None으로 출력이 이뤄집니다.

세 번째와 네 번째는 search로 전체 범주를 확인하므로 숫자가 있기 때문에 출력이 이뤄지죠. 근데, 세 번째를 보면 표현식을 [0-9]*k 로 넣었는데, 이는 숫자가 아무거나 0개 이상 있은 후에 알파벳 k가 있는 '문자열'이 있느냐~ 이 말입니다.
7594k가 해당되므로 똑같이 나오는 것을 볼 수 있습니다.


4. . 과 ? 의 차이

.은 해당 위치에 '하나'의 문자나 숫자를 의미합니다. 
?는 해당 위치에 없거나 최대 1개의 문자나 숫자를 의미합니다.

글로만 보면 뭔소린지 잘 모르겠죠? 역시 코드를 보겠습니다.

match의 첫 번째 줄은 abc뒤에 문자가 있느냐 (아니면 없느냐)라는 의미인데, 있기 때문에 출력이 이뤄졌습니다.

두 번째 줄은 대상 문자열의 abc 뒤에 문자가 없지만 ?는 문자가 없을 수도 있다는 것을 의미하므로 출력이 이뤄졌습니다.

네 번째 줄은 abc 그리고 k사이에 '하나의 숫자나 문자'가 있어야 한다는 겁니다. 하나의 문자가 있으므로 출력이 이뤄졌습니다. 다섯 번째 줄은 하나의 숫자가 있어서 출력이 이뤄졌죠.

여섯 번째 줄은  잘 보면 abc와 k사이에 3개의 문자가 있습니다. 하나의 문자나 숫자가 아니므로 출력이 None으로 나왔습니다.

 

search도 ?와 .는 같은 개념으로 적용됩니다. 다른 것은 search의 여섯 번째 줄은 abc와 k사이에 문자나 숫자가 3개 올 수 있는 패턴을 찾고 있습니다. 비교 대상 문자열에 마침 abc와 k사이에 문자가 3개 있으므로 출력이 이뤄졌습니다. 

 

 

정규표현식은 내용이 많기 때문에 몇 개에 나눠서 정리하겠습니다. 

728x90
반응형