https://gibles-deepmind.tistory.com/87
지난 시간에 정규표현식을 공부하는 이유에 대해서 다뤄봤습니다. 본 글에서는 정규표현식의 규칙에 대해서 본격적으로 다뤄보겠습니다.
0. 들어가며
1. 가장 단순한 규칙
2. 메타문자란 무엇인가?
3. 메타문자 확장하기
3-1. 마침표와 하이픈
3-2. 범위지정
0. 들어가며
구글 방문 기록에서 접속했던 웹 페이지 기록을 검색 하는 것도 정규표현식을 이용하는 것입니다.
아니면 웹 페이지 제목 속에 에이체스 님이 조광일 님과 같이 언급되어 있는 URL을 찾고 싶을 수도 있습니다.
구글 방문기록 검색엔진은 스페이스바를 구분자로 한 단어씩 찾아주는 것 같습니다. 하지만, 정규표현식을 이용하려면 좀 더 복잡한 규칙에 대한 이해가 필요합니다.
1. 가장 단순한 규칙
가장 단순한 규칙은 하나의 문자열만을 입력하는 것입니다.
조금 더 나아가서 한번에 여러 글자를 찾고 싶을 수도 있는데요. 그럴 때는 [] 대괄호를 사용해주시면 됩니다.
대괄호를 사용하면 문자열의 각 글자를 하나씩 찾을 수 있습니다. 왼쪽과 오른쪽을 비교해서 봤을 때, 왼쪽은 [] 안 각 글자를 하나씩 찾은 것을 알 수 있고 오른쪽은 "에조"라는 문자열 전체를 찾은 것을 알 수 있습니다.
[]
대괄호 안 문자열들과 일치하는 것을 찾음 (한글자 단위)
여기서 중요한 것은 "한글자 단위"라는 것입니다. 예를 들어, [에조]는 에와 조를 각각 한 글자씩 찾습니다. 바꿔 말하면 에 또는 조가 나올때 매치된다는 것을 알 수 있는데요. 즉, [] 안의 문자들은 OR 조건이라고 할 수 있습니다.
2. 메타문자란 무엇인가?
자메즈, 베이식, 산이, 조광일, 임플란티드 키드, 쿤타, 육지담, 던밀스, Northfacegawd, Tabber, 365lit, PULLIK, 인디고에이드, 지플랫, 송웨이고야[20], 지구인, 소코도모, 조순영, 머드 더 스튜던트,아넌딜라이트, 아우릴고트, 언오피셜보이, 블라세, 이루이, 김민기, 홍석희, 이안비티씨, 닥터백, 지환지환, 핑핑맨, 민재욱, 김예윤, 엇박천재래퍼, 검은고양이, 정경인, 이규범, 오승훈, 맥나인
- https://namu.wiki/w/SHOW%20ME%20THE%20MONEY%2010
쇼미더머니10 영상심사 합격자 명단인데요. 여기서 이름이 지로 시작하는 래퍼들만 추려보겠습니다.
예상외로 육지담씨가 포함이 되어있는데요. 그 이유는 하나의 문자열만 찾았기 때문입니다. 이 문제를 해결하려면 어떻게 해야 할까요? 문자열이 "지"로 시작한다는 조건을 추가해주면 되겠죠?
지라는 글자 앞에 ^를 사용해주면 이름이 "지"로 시작하는 래퍼들만 찾을 수 있습니다. 왜냐하면, "^"가 문자열의 시작을 의미하기 때문입니다. 하지만, ^를 []안에서 사용하면 또 의미가 달라지는데요.
지를 제외한 모든 문자를 찾습니다. 신기하죠? 또 지로 이름이 끝나는 래퍼를 찾으려면 아래와 같이$를 사용하면 됩니다. 즉, 지가 문자열의 마지막 글자라는거죠.
지금까지 나왔던 [], ?, $와 같은 것들을 메타문자라고 합니다. 메타라는 단어가 무슨 뜻이지? 라고 의아할 수도 있습니다.
제가 아는 메타라고는 가리온의 MC메타님과 게임에서 사용하는 "메타" 밖에 없었습니다(갑자기 오버워치 하고 싶네요). 참고로 게임에서 사용하는 메타는 Most Effective Tactic Available 즉, 필승 전략이라는 의미입니다. 메타는 원래 그리스어로 beyond/after 등의 의미를 가지는데요.
컴퓨터 과학에서는 about, 즉 어떤 대상에 관하여 지칭하는 용어로 사용된다고 합니다. metaphor의 의미가 은유라는 것을 생각해보면 좀 더 이해하기 쉬울 수도 있습니다. 뭐 말이 길어졌는데.. 저도 처음에 입사하고나서 "A님 메타데이터 찾아보세요" 라는 말을 듣고 당황했던 기억이 있어서 주저리 주저리 적어봤습니다. 어쨌든, ^/[] 와 같은 조그만 문자 하나에 함축적인 의미가 포함되어 있다 정도로 생각하시면 될 것 같네요.
3. 메타문자 확장하기
이외에도 다양한 메타문자가 있습니다.
3-1. 마침표(.)와 하이픈(-)
마침표(.)는 모든 문자와 일치합니다(숫자포함). 하이픈(-)은 범위를 지정해줍니다. 여기서 마침표의 경우 모든 대상에 하이라이트 표시가 되어 있는데요. 자세히 보시면 문자별로 그라데이션이 조금씩 다릅니다. 이렇게 표시된 이유는 저 영역들이 "모두 인식되어서"가 아니라 "인식될 수 있는 대상"이라서 저렇게 표시된 것입니다. 만약, 모든 대상을 인식하고 싶으면 반드시 그만큼 반복을 해주어야 합니다. 관련된 내용은 다음 글에서 다루겠습니다.
3-2. 범위 지정 약어
그 자체로 범위 지정이 되어 있는 약어도 있습니다.
예를 들어, \d는 모든 숫자를 의미합니다. 즉, [1-9]와 일치합니다. 반면, \D는 숫자를 제외한 모든것과 일치합니다. 이외에도 다양한 메타 문자들이 있습니다.
다른 메타 문자들은 추후 글에서 다룰 계획입니다. 궁금하신 분들은 위 사이트 표를 한번 참고하셔도 좋을 것 같습니다.
4. 메타 문자 이용시 주의 사항
메타 문자도 엄연히 문자입니다. 예를 들어, 마침표(.)를 따로 구분해줄 때는 어떻게 해야 할까요? 그럴때는 메타 문자 앞에 \를 붙여주면 됩니다.
이때 \를 escape라고 하는데요. 아까 meta가 어떤 대상을 지칭하는 것이라고 했죠? 그 의미에서 탈출했다! = 나는 더 이상 모든 문자를 지침하는 마침표가 아냐! 나는 그냥 마침표라구(급발진). 이런 의미라고 할 수 있습니다.
다음 글에서는 "반복"에 대해서 다뤄보겠습니다. ◠‿◠
'딥상어동의 딥한 데이터 처리 > 전처리' 카테고리의 다른 글
[Pandas] 판다스에서 SQL 윈도우 함수 사용해보기 (0) | 2021.12.27 |
---|---|
정규표현식 뽀개기 (3) - 반복 하기 (0) | 2021.10.24 |
정규표현식 뽀개기 (1) - 정규표현식을 배우는 이유 (0) | 2021.10.20 |
[Pandas] str.contains를 사용하는 이유 - 정규표현식 (0) | 2021.09.26 |
[Pandas] 이것만은 알고가자 - 2.Basic Function (0) | 2021.06.07 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!