python 정규표현식 regular expression - 1 (메타문자)

2 minute read

출처

정규표현식이란?

  • 복잡한 문자열을 처리할 때 사용하는 기법

  • 파이썬뿐만 아니라 문자열을 처리하는 모든 곳에서 사용한다

  • 정규표현식은 복잡한 규칙을 가지고 있는 문자열을 간단한 코드로 처리할 수 있게 해준다

    • 예시

      name  = "Leahyoo Ychaen Chae"
          
      # 처음글자만 두고 나머지 글자의 자리를 **처리하고 싶다면
          
      listA = name.split(' ')
      listB = []
      for char in listA :
          listB.append(char[0]+(len(char)-1)*'*')
          
      result = ' '.join(listB)
      print(result)
          
      # 위의 식을 정규 표현식으로 작성한다면?
          
      

메타문자

  • 메타문자란 원래 그 문자의 뜻이 아니라 특별한 용도로 사용되는 문자를 의미한다

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

1) [ ] : character class

  • [ ] 사이의 문자들과 매치
    • [abc] : [와 ] 사이의 문자인 abc 중 한 개의 문자와의 매치
    • apple -> a,b,c 중 a 문자를 가지고 있어서 매치
    • hello -> a,b,c 중 어떤 문자도 가지고 있지 않아서 매치되지 않음
  • [- ] : 두 문자 사이의 범위를 의미
    • [a-d] : a, b, c, d 를 의미한다 [abcd] 와 동일한 의미
    • [1-5] : 1부터 5까지 [12345]와 동일한 의미
    • [a-zA-Z] : 알파벳 전체
    • [0-9] : 숫자
  • [^] : 반대(not)의 의미를 가짐
    • [0-9] 는 숫자를 의미하는데, [^0-9] 는 숫자가 아닌 문자를 의미
  • 그외 자주 사용하는 문자 클래스

    \d : 숫자와의 매치 [0-9] 동일	<->	\D : 숫자가 아닌 것과 매치 [^0-9]
    \s : 공백 whitespace 매치	   <-> \S : 공백문자 외의 것과 매치
    \w : 문자+숫자와의 매치			 <-> \W : 문자+숫자가 아닌 문자와 매치
         [a-zA-Z0-9_] 동일			     [^a-zA-Z0-9_] 동일
    

2) DOT(.)

  • 줄바꿈 문자인 \n 을 제외한 모든 문자와 매치된다는 의미
    • re.DOTALL 옵션을 주면 \n도 매치 가능
  • 찍은 dot(.) 개수 만큼의 모든 문자와 매치된다
  • a.b
    • ‘a’ + 모든 문자 + ‘b’
    • aab : a + a + b 로, 모든 문자 자리에 a 가 들어갔으므로 매치
    • a0b : a + 0 + b 로, 모든 문자 자리에 0이 들어갔으므로 매치
    • ab : a+ + b 로, 모든 문자 자리에 아무것도 없기 때문에 매치되지 않음
  • 단, 문자클래스 사이에 Dot(.) 있으면 모든 문자라는 의미가 아니라 . 그 자체를 의미
    • a[.]b
    • a.b : . 그자체를 의미하기 때문에 매치
    • aeb : . 이 아니라 e가 있기 때문에 매치되지 않음

3) * : 0번 이상 반복

  • * 바로 앞에 있는 문자 한 개가 0번 이상 ~ 무한대 반복될 수 있음을 의미
    • 물론 메모리 제한으로 무한대번이 아니라 약 2억개 정도만 가능하다고 함
  • to*m
    • tm : o 가 0번 이상 반복하므로 매치
    • toooom : o가 0번 이상 반복하므로(4번) 매치

4) + : 1번 이상 반복

  • * 바로 앞에 있는 문자 한 개가 1번 이상 ~ 무한대 반복될 수 있음을 의미
  • to*m
    • tm : o가 1번 이상 반복하지 않아서 매치되지 않음
    • tom : o가 1번 이상 반복하므로 매치

5) {m}, {m, }, {m,n} 반복 횟수 정하기

  • {m} : m번 반복 / {m, n} : m~n 번 사이 반복
    • 즉, * 는 {0, } 이고, + 는 {1, } 과 같은 의미
    • 하지만 {} 반복 횟수를 정하기 보다 정확한 메타문자를 쓰는 것이 이해하기에 좋다
  • to{2}
    • too : o가 2번 반복하므로 매치
    • to : o가 2번 반복하지 않았으므로 매치되지 않음 (1번 반복)
  • to{2,4}
    • too : o 가 2번 ~ 4번 사이로 반복해서 매치 (2번)
    • tooo : o 가 2번 ~ 4번 사이로 반복해서 매치 (3번)

6) ? : 있어도 되고, 없어도 되고 {0, 1}

  • ? 바로 앞에 있는 문자가 0번이상 ~ 1번 반복될 수 있음 –> 있어도 되고, 없어도 된다는 의미

더보기

Categories:

Updated:

Comments