Sinbum's blog
  • 인셉션 개발자
    • History
    • Editorial Board
    • 세미나
      • MS_빅데이터_분석_교육
      • Databricks_Musinsa_사례분석
      • Databricks_AMOREPACIFIC_사례분석
    • 개발자 꿀팁
  • 리눅스
    • 리눅스 기초
      • 기본명령어
      • 프록시서버
      • 온프레미스
      • systemd
      • 우분투 앱
      • vi 사용법
    • 도커
      • MSA 아키텍처
      • 도커 설명
      • 도커 설치
      • 도커 가이드
        • 컨테이너 만들기
        • 컨테이너 보관
        • 컨테이너 사용
        • 컨테이너 관리
        • 컨테이너 볼륨
        • 컨테이너 통신
        • 도커 연습
  • 언어
    • 자바
      • 자바(JAVA)는 무엇인가?
        • JVM 메모리
      • 자바 설치 가이드
      • 자바 언어 활용
        • 변수
        • static
        • 상수
        • 연산자
        • 제어문
        • 배열
        • CLI-자바사용
        • 클래스
        • 메소드
        • 값에의한 호출
        • GUI 프레임
        • 생성자
        • 오버로딩
        • 상속
        • 상속생성자
        • 접근제한자 와 가비지 컬렉션
        • 추상클래스 와 인터페이스
        • 다중구현
        • 예외처리
        • 컬렉션 프레임워크
        • 쓰레드
        • 네트워크
        • 다중 접속 서버 구현
      • 간단한 채팅 앱 개발하기
    • 파이썬
      • 파이썬(Python)은 무엇인가?
      • 파이썬 설치 가이드
      • 파이썬 언어 활용
        • 변수
        • 입력,출력
        • 타입선언
        • 자료구조
        • 주석처리
        • 문자열
        • 리스트
        • 반복문
        • 연산자
        • 조건문
        • 정규표현식
          • re 모듈
          • 메타문자1
          • 메타문자2
          • 그루핑
          • 전방탐색
          • 문자열 바꾸기
          • Greedy 와 Non-Greedy
      • 마치며...
  • 형상관리,CI/CD
    • 깃허브
      • 깃허브 협업 모델
      • 깃허브 설치 와 ssl
      • 깃허브를 잘쓰는 팁 모음
  • BigData
    • BigData 개념
      • OLTP,OLAP
      • ELT,ETL
      • DW
      • ObjectStorage
      • LambdaArc
      • OGG
    • Kafka
      • 환경설정 및 소스코드 다운로드
      • 아파치 카프카는?
        • 카프카의 시작
        • 카프카 특성
        • 빅데이터 아키텍처
      • 카프카 기초 개념
    • BuildApplications
      • Airflow
      • Grafana
    • PowerBi
      • DAX
        • REMOVEFILTERS
        • DAX_문법
        • DAX_함수
    • Azure
      • SynapseAnalytics
  • IOT
    • 아두이노
      • 설치 및 기초
      • 센서의 종류
      • led 출력하기
      • 시리얼 통신
      • 무선 통신
  • About
    • SINBUM
    • INTEREST
    • PROJECTS
      • 업무 프로젝트
      • 개인 프로젝트
        • 티스토리API를 사용한 블로그 앱
        • 노션 API와 블로그 연동 자동화 하기
        • 로지텍 마우스 수리
    • CONTACT
Powered by GitBook
On this page
  • 정규식이 필요한 이유
  • 정규식 활용 이해
  1. 언어
  2. 파이썬
  3. 파이썬 언어 활용

정규표현식


정규 표현식(Regular Expressions)은 복잡한 문자열을 처리할 때 사용 하는기법입니다. 정규식을 사용하는 경우 문자열 또는 데이터를 십게 변환 및 추출 할 수 있는 이점 이있습니다. 정규식 이라고도 합니다.

정규식이 필요한 이유

우리는 실제로 수많은 데이터를 다룹니다. 회원가입을 할때에도 개개인이 모두 달라서 데이터를 등록할때 핸드폰 번호를 "010-1234-5678" 일때도 있고 "01012345678" 일때 도 있죠? 지금이야 웹페이지에서 가입시 어떠한 조건을 만족해야만 처리가 이루어지지만 그렇지 않은경우도 많이 있을 것입니다.

뒤죽박죽 섞인 텍스트의 데이터들이 원하는 010 1234 5678 만 추출하고 나머지 다른 필요없는 규칙들은 제외하고 싶을 때 우리는 정규식을 사용할 수 있습니다.

정규식 활용 이해

다음과 같은 문제가 있다고 가정합니다.

    주민등록번호를 포함하고 있는 텍스트가 있습니다. 이 텍스트에 포함된 모든 주민등록번호의 뒷자리를 * 문자로 변경해 봅시다.

정규식을 모르고 하드코딩을 한다면 아래와 같은 순서로 프로그램을 만들어야 할것입니다.

  1. 전체 텍스트를 스플릿을 사용해 공백 문자로 나눕니다

  2. 나뉜 단어가 주민등록번호 형식인지 확인한다.

  3. 단어가 주민등록번호 형식이라면 뒷자리를 * 로 변환한다.

  4. 나뉜 단어를 다시 조립 하도록 한다.

이 로직을 코드로 구현한다면 아래와 같을 것 입니다.

data = """
CHOI 910215-1234567
SON  810526-2234567
"""

result = []

## 줄바꿈처리를 기준으로 나눠서 리스트 형식으로 반환된 데이터를 반복문에 넣는다.
for line in data.split("\n"):    
    word_result = [] # 리스트 선언
    for word in line.split(" "): ## 한줄을 다시 공백을 기준으로 나눈다.
        if len(word) == 14 and word[:6].isdigit() and word[7:].isdigit(): #주민등록번호를 확인한다.
            word = word[:6] + "-" + "*******" #뒷자리 변환
        word_result.append(word) 
    result.append(" ".join(word_result))
print("\n".join(result))

그러나 정규식을 사용하면 훨씬 간편하면서도 직관적으로 코드를 작성할 수 있습니다.

import re 

data = """
CHOI 910215-1234567
SON  810526-2234567
"""

pat = re.compile("(\d{6})[-]\d{7}")
print(pat.sub("\g<1>-*******", data))

훨씬 간편하지 않나요? 정규식을 이해한다면 이것이 수백줄 수천줄 코드로 짜여져 있을경우 높은 가독성과 직관적인 코드를 짤 수 있을 것입니다. 또한 찾으려는 문자열 이나 문자열의 규칙이 매우 복잡한 경우에 정규식은 훨씬 강력합니다.


Previous조건문Nextre 모듈

Last updated 2 years ago

참고 : 점프 투 파이썬