Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Oracel
- 빅데이터 분석 기사
- python3
- level 1
- 코딩테스트
- 실기
- R
- 오라클
- Python
- 실습
- 카카오
- Numpy
- level 2
- 데이터 분석
- 튜닝
- sklearn
- pandas
- 빅분기
- oracle
- Kaggle
- 파이썬
- matplotlib
- 프로그래머스
- 알고리즘
- seaborn
- SQL
- 머신러닝
Archives
- Today
- Total
라일락 꽃이 피는 날
[Python] 정규 표현식 (regular expression) 1 본문
728x90
정규 표현식 (regular expression)
특정한 패턴과 일치하는 문자열을 검색, 치환, 제거하는 기능을 지원한다.
정규 표현식의 도움 없이 패턴을 찾는 작업은 불완전하거나 작업의 비용이 높다.
예) 이메일 형식 판별, 전화번호 형식 판별, 숫자로만 이루어진 문자열 등
raw string
문자열 앞에 r이 붙으면 해당 문자열이 구성된 그대로 문자열로 변환한다.
a = 'abcdef\n'
print(a) # abcdef
b = r'abcdef\n'
print(b) # abcdef\n
기본 패턴
a, X, 9 등 문자 하나하나의 character들은 정확히 해당 문자와 일치
대소문자의 경우 기본적으로 구별하나, 구별하지 않도록 설정 가능하다.
몇몇 문자들에 대해서는 예외가 존재하는데, 이들은 특별한 의미로 사용된다.
ex) ^ $ * + ? { } [ ] \ | ( )
- . (마침표) : 어떤 한개의 character와 일치 (newline(엔터) 제외)
- \w : 문자 character와 일치 [a-zA-Z0-9_]
- \s : 공백 문자와 일치
- \t, \n, \r : tab, newline, return
- \d : 숫자 character와 일치 [0-9]
- ^, $ : 각각 문자열의 시작과 끝을 의미
- \가 붙으면 스페셜한 의미가 없어진다. 예를 들어, \.는 .자체를 의미하고 \\는 \를 의미한다.
search method
첫 번째로 패턴을 찾으면 match 객체를 반환하고, 패턴을 찾지 못하면 None을 반환한다.
import re
m = re.search(r'abc', '123abcdef')
print(m.start()) # 3
print(m.end()) # 6
print(m.group()) # abc
m = re.search(r'abc', '123abdef')
print(m) # None
m = re.search(r'\d\d', '112abcdef119')
print(m) # <re.Match object; span=(0, 2), match='11'>
m = re.search(r'\d\d\d\d', '112abcdef119')
print(m) # None
m = re.search(r'\d\d\d\w', '112abcdef119')
print(m) # <re.Match object; span=(0, 4), match='112a'>
m = re.search(r'..\w\w', '@#$%ABCDabcd')
print(m) # <re.Match object; span=(2, 6), match='$%AB'>
metacharacters (메타 캐릭터)
[] : 문자들의 범위를 나타내기 위해 사용한다.
[] 내부의 메타 캐릭터는 캐릭터 자체를 나타낸다.
- [abck] : a or b or c or k
- [abc.^] : a or b or c or . or ^
- [a-d] : -와 함께 사용되면 해당 문자 사이의 범위에 속하는 문자 중 하나
- [0-9] : 모든 숫자
- [a-z] : 모든 소문자
- [A-Z] : 모든 대문자
- [a-zA-Z0-9] : 모든 알파벳 문자 및 숫자
- [^0-9] : ^가 맨 앞에 사용 되는 경우 해당 문자 패턴이 아닌 것과 매칭
re.search(r'[cbm]at', 'cat') # <re.Match object; span=(0, 3), match='cat'>
re.search(r'[cbm]at', 'aat') # None
re.search(r'[0-9]haha', '1hahah') # <re.Match object; span=(0, 5), match='1haha'>
re.search(r'[0-4]haha', '7hahah') # None
re.search(r'[abc.^]aron', 'caron') # <re.Match object; span=(0, 5), match='caron'>
re.search(r'[abc.^]aron', 'daron') # None
re.search(r'[^abc]aron', '#aron') # <re.Match object; span=(0, 5), match='#aron'>
re.search(r'[^abc]aron', 'aaron') # None
\
다른 문자와 함께 사용되어 특수한 의미를 지닌다.
- \d : 숫자 [0-9]와 동일
- \D : 숫자가 아닌 문자 [^0-9]와 동일
- \s : 공백 문자 (띄어쓰기, 탭, 엔터 등)
- \S : 공백이 아닌 문자
- \w : 알파벳 대소문자, 숫자 [0-9a-zA-Z]와 동일
- \W : non alpha-numeric 문자 [^0-9a-zA-Z]와 동일
- \. , \\ : 메타 캐릭터가 캐릭터 자체를 표현하도록 할 경우 사용
re.search(r'\sand', 'apple and banana') # <re.Match object; span=(5, 9), match=' and'>
re.search(r'\Sand', 'apple land banana') # <re.Match object; span=(6, 10), match='land'>
re.search(r'\.and', '.and') # <re.Match object; span=(0, 4), match='.and'>
. (마침표)
모든 문자를 의미한다.
re.search(r'p.g', 'pig') # <re.Match object; span=(0, 3), match='pig'>
반복 패턴
패턴 뒤에 위치하는 *, +, ?는 해당 패턴이 반복적으로 존재하는지 검사한다.
반복 패턴의 경우 greedy하게 검색한다. 즉, 가능한 많은 부분이 매칭되도록 한다.
- '+' : 1번 이상의 패턴이 발생
- '*' : 0번 이상의 패턴이 발생
- '?' : 0 혹은 1번의 패턴이 발생
re.search(r'a[bcd]*b', 'abcbdccb') # <re.Match object; span=(0, 8), match='abcbdccb'>
re.search(r'b\w+a', 'banana') # <re.Match object; span=(0, 6), match='banana'>
re.search(r'i+', 'piigiii') # <re.Match object; span=(1, 3), match='ii'>
re.search(r'pi+g', 'pg') # None
re.search(r'pi*g', 'pg') # <re.Match object; span=(0, 2), match='pg'>
re.search(r'https?', 'https://www.naver.com') # <re.Match object; span=(0, 4), match='http'>
re.search(r'https?', 'http://www.naver.com') # <re.Match object; span=(0, 4), match='http'>
728x90
'프로그래밍 > Python' 카테고리의 다른 글
[Python] requests (0) | 2021.08.22 |
---|---|
[Python] 정규 표현식 (regular expression) 2 (0) | 2021.08.16 |
[Python] Class Inheritance (상속) (0) | 2021.08.16 |
[Python] Class (클래스) (0) | 2021.08.16 |
[Python] Package, Module (0) | 2021.06.15 |