1. 기본
가. 대표문자(Meta sequence)
# 예제, 이하 3번째 줄의 빈칸에 정규표현식 삽입
# 빈칸에 정규표현식을 적습니다.
regex = r'빈칸'
search_target = '''Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
import re
result=re.findall(regex,search_target)
print(result)
Python
복사
1) \d, 숫자(digit)
•
0부터 9까지의 숫자 대표
•
빈칸에 \d 삽입 시 세로방향으로 숫자가 하나씩 출력됨
2) \w, 글자(word)
•
숫자(0~9)와 글자(A, b, c, 가, 나) 대표
•
특수문자 대표 X, 하지만 언더스코어(_)는 포함
•
빈칸에 \w 삽입 시 세로방향으로 글자가 하나씩 출력됨
나. 횟수 정하기(Quantifier)
1) +, 하나 또는 그 이상 연결된
•
\d+: 하나 또는 그 이상 연결된 숫자
•
빈칸에 \d+ 삽입 시 다음과 같이 출력됨
02
123
4567
...
Python
복사
2) *, 0개 또는 그 이상 연결된
•
\d*: 숫자가 0개 이상
•
[1-9]\d*: 첫번째 자리는 1 - 9 사이의 숫자, 두번째 자리부터는 없거나 숫자로 연결된 것
•
빈칸에 [1-9]\d* 삽입 시 다음과 같이 출력됨
2
123
4567
...
Python
복사
•
빈칸에 [1-9]\d+ 삽입 시 다음과 같이 출력됨
→ '02'에 대해서는 스킵함
→ 첫번째 digit '0'은 1-9 범주에 들지 않음
→ 두번째 digit '2'는 1-9 범주에 들어옴
→ 하지만 세번째 digit이 없으므로 02는 위의 정규표현식의 조건에 부합하지 않음
→ d+의 경우 하나 이상이므로 이어진 숫자가 있어야 함
→ 반면 d*의 경우 0개 이상으로 이어진 숫자가 있어야 하므로 '02'에 대해서 표현식 조건에 부합함
123
4567
70
Python
복사
3) ?, 있거나 없거나(Or)
•
-?: '-'가 있거나 없거나
•
\d+-?\d+-?\d+: 3자리의 숫자 중 '-'가 있는 것과 없는 것
['02-123-4567', '070-9999-9999', '010', '2454', '3457']
Python
복사
•
[- ]?: '-' 또는 공백이 있거나 없거나
•
\d+[- ]?\d+[- ]?\d+: 3자리의 숫자 중 '-' 또는 공백이 있거나 없는 것
['02-123-4567', '070-9999-9999', '010 2454 3457']
Python
복사
4) {숫자}: '숫자'번 반복
•
\d{2}: 숫자가 연속해서 두 번 나옴
•
{숫자1, 숫자2}: 숫자1부터 숫자2까지의 범위 내에서 반복 가능
•
\w{2,3}: 글자가 2개 또는 3개가 연속해서 나온다
•
\d{2,3}[- ]?\d{3,4}[- ]?\d{4}: 첫번째 자리수에는 숫자가 2개 또는 3개 연속, 두번째 자리수 ~~
['02-123-4567', '070-9999-9999', '010 2454 3457']
Python
복사
다. 고르기
1) [], 고르기
•
[aeiou]: 소문자 a, e, i, o, u 만 선택
u
e
a
...
Python
복사
2)[ - ], 범위에서 고르기
•
[a-z]: 모든 알파벳 소문자 고르기
•
[0-9]: 0과 양의 정수 고르기
•
[a-z]+: 모든 알파벳 소문자를 연속된 형태로 고르기
uke
kywarker
luke
...
Python
복사
3) [가-힣], 한글 고르기
•
[가-힣]+: 모든 한글 단어 고르기
라. 기타 대표문자
•
\s 공백 문자(스페이스, 탭, 뉴라인)
•
\S 공백 문자를 제외한 문자
•
\D 숫자를 제외한 문자
•
\W 글자 대표 문자를 제외한 글자들(특수문자, 공백 등)
2. Path Matching 활용
가. Path Matching 핵심 문법
1) 개괄
•
정규표현식은 The roq string literal syntax로 선언되어 사용됨
→ r'' 형태의 내부에 정규표현식이 선언
→ r'^book/(?P<pk>\d+)$'
나. 패턴 예제
1) r'^book/(?P<pk>\d+)$'
•
^book/: 문자열이 'book/'으로 시작하는지 검사
•
(?P<pk>\d+): 1개 이상의 숫자로 이루어진 패턴(\d+)을 찾아서 pk라는 이름의 변수에 할당하여 view에 전달
→ pk=1234
•
$: \d+에 따라 패턴의 마지막이 숫자로 끝나는지 확인
•
위의 정규표현식은 book/1234 형태의 패턴을 찾고 pk=1234를 view에 전달
2) r'^book/(\d+)$'
3) r'^book/(?P<stub>[-\w]+)$'
Reference
•
프로그래머스 정규표현식, https://programmers.co.kr/learn/courses/11