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. 파이썬 언어 활용
  4. 정규표현식

전방탐색

정규식에서 가장 어려워하는부분이 전방 탐색 확장(Lockahead Assertions) 구문입니다. 그러나 꼭 필요한 경우가 있으니 알아 두는 것이 좋습니다.

다음 예제를 보며 코드 리뷰를 하겠습니다.

전방 탐색의 종류

import re

p = re.compile(".+:")

m = p.search("http://google.com")
print(m.group()) # http:

정규식의 패턴은 ".+:" 으로 문자열을 'https:'로 리턴하였습니다. 만약 ':' 를 제외 하고 출력 한다면 각 그루핑을 포함한 여러 조건이 추가된다면 어떻게 해야할까요?

전방탐색은 다음과 같이 긍정과 부정의 2종류가 있습니다.

  • 전방탐색

    • 긍정형 전방탐색 : (?=...) ... 에 해당되는 정규식과 매치, 조건이 통과되어도 문자열이 소비되지 않음

    • 부정형 전방탐색 : (?=!...) ... 에 해당 되지 않아야하며 , 조건이 통과되어도 문자열이 소비되지 않음

긍정형 전방 탐색

긍정형 전방 탐색을 사용하면 'http:' 가 아닌 'http'의 결과를 추출해 낼 수 있습니다.

다음 예제를 살펴 보겠습니다.

import re

p = re.compile(".+(?=:)")

m = p.search("http://google.com")
print(m.group()) # http

정규식 중에 ":"에 해당하는 긍정 전방 탐색을 적용하였습니다. (?=:) 사용 이렇게 하면 기존 정규식과 검색에서는 동일한 효과를 발휘하지만 ':' 에 해당하는 문자열이 정규식엔진에 의해 포함되지만 검색결과에는 제외 됩니다. 검색 결과는 ':' 가 제거된 이 후의 값을 출력합니다.

부정형 전방 탐색

우리는 어떤 조건식을 내놓을떼 어떤것을 제외하는 경우의 조건식이 더 간편할 때도 있는것을 잘 알고 있습니다. 예를 들어 if문 조건식에서도 긍정식의 방향으로만 부정 조건을 찾는다면 조건식의 알고리즘이 상당히 복잡해 지겠죠. 따라서 부정식을 사용한 제외 케이스 인 경우 코드를 훨씬 간결하게 작성할 수 있습니다.

다음은 부정형 전방 탐색을 이용해 파일의 확장자명을 파싱하는 경우의 정규식입니다.

즉 확장자가 bat이 아닌경우에 통과 된다는 말입니다.

조건이 추가되는 경우는 다음과 같이 작성합니다.

Previous그루핑Next문자열 바꾸기

Last updated 2 years ago

..$ # 모든문자 '.' 와 '.'점을가지며 그리고 (?!bat$)을 통해 bat으로 끝나지않는 패턴을 가집니다.

..$ "확장자 뒤에 모든 문자열을 가지고 오지만 bat과exe로 끝나는 확장자는 추출하지 않는다"는 의미입니다.

.
.