매번 찾아보기 번거로워 사용하는 것만 정리해서 올려두었습니다.


가장 먼저 정규표현식하면 필수적으로 나오는 이메일과 핸드폰 번호 예제입니다.

# 스타일이나 표현하고 싶은 방법에 따라 다름, 여기선 가장 기본적인 문법
# 경우에 따라 특수문자를 표현하기 위해 %, - 등을 집어넣을 수 있다
# ex) r'([\w.%-]+@ 등)'
re.findall(r'(\w+)@(\w+).(\w+)', 'test123@tistory.com')
# [('test123', 'tistory', 'com')]
re.findall(r'(\w+)-(\w+)-(\w+)', '010-1234-5678')
# [('010', '1234', '5678')]

 

아래 예제에서는 findall로 대부분 예제를 작성했지만, 주로 search, match, findall을 사용합니다.

  • []
    • [] 안에 정의한 문자들에 포함되는 것을 찾는다
    • 단, '^'가 []의 맨 앞에 올 경우, 해당 패턴이 아닌 것을 찾는다
re.findall('[#4]', '1#a2b3c4')
# ['#', '4']

re.findall('[A-Z]', '12a3B4DZ')
# ['B', 'D', 'Z']

re.findall('[^0-9]', '12a3B4DZ')
# ['a', 'B', 'D', 'Z']
  • . (점)
    • 한 개 chracter(모든 문자)와 일치하는 것을 찾는다, .. 이면 character 두 개가 이어진 것을 찾는다
    • 만약 '점' 자체를 찾고 싶다면, \.으로 표현해주면 된다
re.findall('[0-9].[a-z]', '1#a2b3c4')
# ['1#a']
  • \w
    • character를 의미, \w\w는 character 두 개가 이어진 것을 의미한다
    • \W는 character가 아닌 문자를 의미
re.findall('[0-9]\w', '1a2b3c4')
# ['1a', '2b', '3c']
  • \d
    • 숫자를 의미, \d\d는 숫자 두 개가 이어진 것을 의미한다
    • \D는 숫자가 아닌 문자를 의미
re.findall('\d[a-z]', '1a2b3c4')
# ['1a', '2b', '3c']
  • \s
    • 공백을 의미(space, tab 등)
    • \S는 공백이 아닌 문자를 의미
  • ^과 $의 의미
    • ^: 문자열의 시작부터 일치
    • $: 문자열의 끝이 일치
re.findall(r'^abc', 'abc') # 'abc' -> a로 시작해야함
re.findall(r'^abc', '@abc') # 못찾음

re.findall(r'abc$', 'abc') # 'abc' -> c로 끝나야함
re.findall(r'abc$', 'abc@') # 못찾음
  • 문자열 앞에 r을 붙임
    • \t, \n 등 escape 표현을 무시하고 그대로 표현
a = r'test\n'
print(a) # test\n
  • '+', '*', '?'
    • +: 패턴이 적어도 한번은 나와야 추출
    • *: 패턴이 0번 이상인 경우 추출, 즉 없어도 추출함(+와 차이점)
    • ?: 패턴이 아예 없거나(0) 한번만 나오거나(1)
re.findall(r'a1+dz+', 'a1dzzzc') # 'a1dzzz'
re.findall(r'a1+dz+', 'adzzzc') # 못찾음

re.findall(r'a1*dz*', 'a1dzzzc') # 'a1dzzz'
re.findall(r'a1*dz*', 'adzzzc') # adzzz 찾음

re.findall(r'a1?dz?', 'a1dzzzc') # 'a1dz' -> 1 한번, z 한번
re.findall(r'a1?dz?', 'adzzzc') # adz -> 1 없음, z 한번
  • {}
    • 패턴 횟수를 설정해줄 때 사용
re.findall(r'te+st', 'test,teest,teeest') # ['test', 'teest', 'teeest']
re.findall(r'te{3}st', 'test,teest,teeest') # ['teeest'] -> e가 3번 반복되는 것만 추출
re.findall(r'te{2,3}st', 'test,teest,teeest') # ['teest', 'teeest'] -> e가 2~3번 반복되는 것만 추출
  • {}?
    • 최소 기준으로 매칭
re.search(r't.{2,3}', 'test,teest,teeest') # test
re.search(r't.{2,3}?', 'test,teest,teeest') # tes
  • 예제) 특정 문자로 시작되는 패턴 찾기
    • 여기서 다루는 예는 매우 한정적일 수 있습니다~
    • 여기서는 w로 시작되면서 숫자로 끝나는 패턴을 찾아보겠습니다. 단, w와 숫자 사이에는 공백이 있을 수 있고, 없을 수 있습니다.
re.search(r'[^A-Za-z0-9]w[\s]?\d+\d$', 'benz sclass w212') # w212
re.search(r'[^A-Za-z0-9]w[\s]?\d+\d$', 'benz sclass w 212') # w 212