정규 표현식(RegEx)을 이해 해보자!
이제는 이해하고, 사용해보자! 2020-08-01
주의! Caution!
해당 게시글은 Archive된 게시글 입니다.
Archive된 사유는 다음 중 하나에 해당 됩니다.
  • 작성 된지 너무 오랜 시간이 경과 하여, API가 변경 되었을 가능성이 높은 경우
  • 주인장의 Data Engineering으로의 변경으로 질문의 답변이 어려워진 경우
  • 글의 퀄리티가 좋지 않아 글을 다시 작성 할 필요가 있을 경우
이 점 유의하여 게시글을 참고 하시길 바랍니다.

그렇습니다. 지긋지긋한 정규 표현식 입니다. 막상 공부하자니 귀찮고, 거부감도 드는 그런 녀석입니다. 생긴 것도 기분 나쁘게 생겨가지고. 하지만 이 친구, 사실 한 번 알면 그렇게 어려운 친구도 아니고, 하드 코딩을 하는 당신의 손목의 피로감을 줄여 줄 수 있습니다.

정규 표현식은 다양한 곳에 사용 될 수 있습니다. 자연어 데이터 전처리, 이메일 검증, 비밀번호 검증 등 많은 곳에서 사용하여, 프론트앤드 개발자, 백앤드 개발자, 데이터 사이언티스트 등등 모두에게 중요 합니다. 너무 어렵게 생각하지 말고, 한 번 시작해볼까요?

근데 솔직히 킹받게 생겼네요 진짜

일단 기초부터 차근차근

일단 기본 문법부터 차근차근 나아가 보겠습니다. 우리가 영어를 읽을 때 단어를 알아도, 어떻게 읽는지 모르면 다 소용이 없습니다. 시작 해 보겠습니다.

문자클래스, []

[]는 문자클래스를 선언하는데 사용 합니다. 이는 그 내부에 해당하는 문자열 중 하나를 고르겠다는 이야기 입니다.

[(문자의 나열)]

  • [ab]: a, b중 하나를 선택한다는 이야기 입니다.
  • [abd]: a, b, d중 하나를 선택한다는 이야기 입니다.

[abd] 예시

JustKode, who named Min Jae Park is super babo. He not good at english. So, He studied english hard. From reading to writing, everyday he struggled. Sadly, he is still weak at english words. Yes, The above story is my story. So, If you are good at english, Call me!, justkode@kakao.com

[(문자)-(문자)]

  • [a-z]: ASCII 코드a와 z사이 모든 문자를 선택 합니다.
  • [A-Za-z]: ASCII 코드A와 Z사이, a와 z사이 모든 문자를 선택 합니다.

[A-Za-z] 예시

JustKode, who named Min Jae Park is super babo. He not good at english. So, He studied english hard. From reading to writing, everyday he struggled. Sadly, he is still weak at english words. Yes, The above story is my story. So, If you are good at english, Call me!, justkode@kakao.com

[^(클래스 조합)]

  • [^A-Za-z]: ASCII 코드A와 Z사이, a와 z사이를 제외한 모든 문자를 선택 합니다.

[^A-Za-z] 예시

JustKode**,** who named Min Jae Park is super babo**.** He not good at english**.** So**,** He studied english hard**.** From reading to writing**,** everyday he struggled**.** Sadly**,** he is still weak at english words**.** Yes**,** The above story is my story**.** So**,** If you are good at english**,** Call me!, justkode**@**kakao.com

특수 문자 \

\는 다양한 용도로 사용 됩니다. [0-9] 같은 문구를 쓰지 않고 \d처럼 간단하게 원하는 문자열을 찾을 수 있게 해 줍니다. 밑에 예시를 들어 드리겠습니다.

  • \^: 특수문자 "\"를 입력 할 수 있게 해 줍니다.

  • \b: 단어의 처음 혹은 끝에 있는 문자 혹은 문자 클래스를 검출 합니다.

    • 만약 s\b 라면

    she sells seashells

    • 만약 \bs 라면

    she sells seashells

  • \B: 단어의 처음 혹은 끝에 있지 않은 문자 혹은 문자 클래스를 검출 합니다.

    • 만약 s\B 라면

    she sells seashells

    • 만약 \Bs 라면

    she sells seashells

  • \d: 숫자를 찾습니다.

My Number is 010-1010-1010

  • \D: 숫자가 아닌 것을 찾습니다.

My Number is 010**-1010-**1010

  • \s: 공백문자를 찾습니다.

Hello, World!

  • \S: 공백문자가 아닌 것을 찾습니다.

Hello, World!

  • \t: Tab 문자를 찾습니다.

Hello, World!

  • \w: **알파벳 + 숫자 + _**를 찾습니다.

justkode@kakao.com

  • \W: **알파벳 + 숫자 + _**가 아닌 것을 찾습니다.

justkode**@kakao.**com

Meta 문자

  • ^x: 문자열이 x로 시작합니다.

    • ^x

    xy and xz

    • ^\w

    Simple is best

    • ^\w+

    Simple is best

  • x$: 문자열이 x로 끝납니다.

    • x$

    xy yx

    • \w$

    Simple is best

    • \w+$

    Simple is best

  • .: 임의의 한 문자를 나타냅니다.

    • .

    Simple is best

    • .s

    Simple is best

  • x+: x가 1번이상 반복합니다.

    • i+

    real illness

    • \w+

    justkode@kakao.com

  • x?: x가 있거나 없는 것을 나타 냅니다.

    • colou?r

    color colour coloor

  • x*: x가 0번 이상 반복 된다는 것을 나타 냅니다.

    • co*

    cl col cool coool cooool

  • x|y: x 또는 y를 나타냅니다.

    • b(a|e)d

    bad bed bid

  • (xy): () 안의 내용을 그룹화 합니다.

    • (lol)|(ha)

    ha haha hahaha! lol lolol lololol

  • x{n}: x를 n번 반복한 문자를 찾습니다.

    • (ha){3}

    haha hahaha hahahaha

  • x{n,}: x를 n번 이상 반복한 문자를 찾습니다.

    • (ha){3,}

    haha hahaha hahahaha

  • x{n,m}: x를 n번 이상, m번 이하 반복한 문자를 찾습니다.

    • (ha){2,3}

    haha hahaha hahahaha

예시를 통해 알아 봤으니, 우리가 한 번 만들어 볼 차례 입니다!

위에 나열되 있는 정규 표현식 기호들을 보니, 이것들을 어떻게 외울지 막막해 보입니다. 하지만, 직접 만들면서 하나하나 그 뜻을 이해해 보면 어렵지 않을 것 입니다! 한 번, 여러 가지 예시들을 통해, 복습 해 보겠습니다.

전화번호 정규식

전화번호 정규식을 만들어 볼까요? 전화번호 예시를 보겠습니다.

010-1234-5678, 031-123-4567, 02-1234-5678

우리는 위 예시를 보고, 다음과 같은 특징이 있음을 알 수 있습니다.

  • 숫자 2~3 개로 시작: \d{2,3}
  • 기호 '-' 가 등장: -
  • 숫자 3~4개 등장: \d{3, 4}
  • 기호 '-' 가 등장: -
  • 숫자 4개 등장 후 끝: \d{4}

결과: \d{2,3}-\d{3,4}-\d{4}

010-1234-5678, 031-123-4567, 02-1234-5678

이메일 정규식

다음과 같은 이메일의 특징은 다음과 같습니다.

My Email is justkode@kakao.com, sobu0715@gmail.com

  • 아이디에는 알파벳, 숫자만 들어 갈 수 있다.: [0-9a-zA-Z]+
  • '@' 기호가 추가 된다.: @
  • 사이트 이름에도 알파벳, 숫자만 들어 갈 수 있다.: [0-9a-zA-Z]+
  • '.' 기초가 추가 된다. \.
  • 마찬가지로 최상위 도메인에는 알파벳, 숫자만 들어 갈 수 있다. 하지만 글자가 2개 이상 이어야 한다.: [0-9a-zA-Z]{2,}

결과: [0-9a-zA-Z]+@[0-9a-zA-Z]+\.[0-9a-zA-Z]{2,}

My Email is justkode@kakao.com, sobu0715@gmail.com

마치며

이렇게 오늘은 정규 표현식에 알아 보는 기회를 가졌습니다. 하지만, 더 중요한 것은, 보고 해석하는 것도 좋지만, 우리가 직접 만들어서 정규 표현식을 원활하게 사용 할 수 있어야 더 좋습니다. 아래 사이트들은 정규 표현식을 실제로 작성해 보고, 테스트 해볼 수 있는 사이트, 또는 정규 표현식에 대해 더 자세히 배울 수 있는 사이트들 입니다. 여기까지 따라 오느라 고생 하셨습니다!

Recent Posts in Data-Science Category