[Python] 23. 정규 표현식(regular expression)

2023. 11. 7. 22:07·Programming Language(Sub)/Python
목차
  1. 정규 표현식이란?
  2. 정규 표현식의 메타 문자

정규 표현식


정규 표현식이란?


  • 정규 표현식 : 복잡한 문자열을 처리할 때 사용하는 기법

  • 파이썬 말고도 다른 곳에서도 사용함

정규 표현식이 필요한 이유?

  • example : 주민번호 뒷자리 7자리를 *로 변환하기
data = """
park 800905-1049118
kim 700905-1059919
"""

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

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

정규 표현식의 메타 문자


  • .^$*+?{}[]|()

  • 문자 클래스 []

    • 문자클래스로 만들어진 정규식은 '[] 사이의 문자들과 매치'라는 의미를 갖는다.

    • 정규표현식이 [abc]라면 이 표현식은 a, b, c 중 한 개의 문자와 매치를 뜻한다

    • ex) 정규식이 [abc]라고 할 때

      • "a"는 정규식과 일치하는 문자 a가 있으므로 매치

      • "before"는 정규식과 일치하는 문자 b가 있으므로 매치

      • "dude"는 정규식과 일치하는 문자가 아무것도 없으므로 매치되지 않음

    • 하이픈(-)를 사용하면 범위(From ~ To)를 의미

      • [a-c]는 [abc]와 동일

      • [0-5]는 [012345]와 동일

      • [a-zA-Z] : 알파벳 모두

      • [0-9] : 숫자

    • ^은 not(반대)를 의미

      • [^0-9] : 숫자가 아닌 문자에 매칭
    • 별도의 표기법이 있는 표현식

      • \d : [0-9]

      • \D : [^0-9]

      • \s : whiltespace(space와 tab과 같은 공백을 표현하는 문자)와 매치, [\t\n\r\f\v]와 동일

      • \S : \s의 반대

      • \w : 문자 + 숫자, 언더바_와 매치, [a-zA-Z0-9_]와 동일

      • \W : 공백문자나 특수문자에 매치(\w의 반대)

  • Dot(.)

    • 줄바꿈 문자 \n을 제외한 모든 문자와 매치됨을 의미

    • example) a.b

      • "a + 모든문자 + b"와 같다

      • 즉 a와 b 사이에 어떤 문자가 들어가도 모두 매치된다를 의미

  • [.]

    • .문자가 있어야만 매치됨을 의미

    • example) a[.]b

      • a와 b 사이에 . 문자가 있어야 매치
  • 반복(*)

    • 반복을 의미하는 메타 문자

    • ex) ca*t

      • 문자 바로 앞에 있는 a가 0번 이상 반복되면 매치

      • ct : "a"가 0번 반복되어 매치

      • cat : "a"가 1번 반복되어 매치

      • caaat : "a"가 3번 반복되어 매치

  • 반복(+)

    • 반복을 나타내는 메타 문자

    • * 와 다르게 최소 1번이상 반복될 때 사용

    • ex) ca+t

      • 문자 바로 앞에 있는 a가 1번 이상 반복되면 매치

      • ct : "a"가 0번 반복되어 매치되지 않음

      • cat : "a"가 1번 반복되어 매치

      • caaat : "a"가 3번 반복되어 매치

  • 반복({m, n}, ?)

    • { } 메타 문자를 사용해 반복 횟수를 고정할 수 있다

    • {m, n} : 반복 횟수가 m부터 n까지 매치 할 수 있음

    • m 또는 n은 생략할 수 있음

      • {3, } : 반복 횟수가 3 이상

      • {, 3} : 반복 횟수가 3 이하

      • 생략된 m : 0과 동일

      • 생략된 n : 무한대를 의미

    • ex) ca{2}t

      • a가 2번 반복되면 매치

      • cat : "a"가 1번 반복되어 매치되지 않음

      • caat : "a"가 2번 반복되어 매치

    • ex) ca{2, 5}t

      • a가 2~5번 반복되면 매치

      • cat : "a"가 1번 반복되어 매치되지 않음

      • caat : "a"가 2번 반복되어 매치

      • caaaaat : "a"가 5번 반복되어 매치

    • 반복은 아니지만, {0, 1}을 의미하는 ? 메타문자도 있음

    • ex) ab?c

      • b가 0~1번 사용되면 매치

      • abc : "b"가 1번 사용되어 매치

      • ac : "b"가 0번 사용되어 매치

      • 즉, "b"가 있거나 없거나 둘다 매치 되는 경우

  • *, +, ? 메타 문자 모두 {m,n}으로 나타낼 수 있지만, 이해하기 쉽고 간결하게 메타 문자를 가능하면 사용하자

참조) Do it! 점프 투 파이썬 (박응용 지음), https://wikidocs.net (파이썬 계단밟기)

'Programming Language(Sub) > Python' 카테고리의 다른 글

[Python] 24. GUI(Graphic User Interface) - tkinter  (0) 2023.11.08
[Python] 22. 표준 라이브러리(Standard Library)(2)  (0) 2023.11.07
[Python] 21. 표준 라이브러리(Standard Library)(1)  (0) 2023.11.07
[Python] 20. 내장 함수(Built-in-function)  (0) 2023.11.07
[Python] 19. 예외처리(Exception Handling)  (0) 2023.11.07
  1. 정규 표현식이란?
  2. 정규 표현식의 메타 문자
'Programming Language(Sub)/Python' 카테고리의 다른 글
  • [Python] 24. GUI(Graphic User Interface) - tkinter
  • [Python] 22. 표준 라이브러리(Standard Library)(2)
  • [Python] 21. 표준 라이브러리(Standard Library)(1)
  • [Python] 20. 내장 함수(Built-in-function)
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (452) N
      • Software Development (27) N
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8) N
        • Code Style, Convetion (0)
        • DDD (0)
        • Software Engineering (18)
      • Java (71) N
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (12)
        • JVM (2) N
      • Spring (53) N
        • Framework (12)
        • MVC (23)
        • Transaction (3) N
        • AOP (11) N
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (125)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (1)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1) N
        • Docker (1) N
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77) N
        • Kotlin (1) N
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[Python] 23. 정규 표현식(regular expression)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.