안녕하세요 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개 있으므로 출력이 이뤄졌습니다.
정규표현식은 내용이 많기 때문에 몇 개에 나눠서 정리하겠습니다.
'프로그래밍 > Python' 카테고리의 다른 글
파이썬에서 쓰이는 비트연산 (0) | 2022.09.02 |
---|---|
[디자인 패턴] 팩토리 메서드 패턴 (0) | 2022.08.25 |
[혼공머신러닝] 7장 인공신경망 기본 정리 (0) | 2022.08.20 |
[혼공머신러닝] 6장 k평균 알고리즘 정리 (0) | 2022.08.12 |
파이썬으로 구현해 확인하는 MODBUS통신 - Client 편 (5) | 2022.08.05 |