정규표현식
- regular expression
- 특정한 패턴과 일치하는 문자열를 '검색', '치환', '제거' 하는 기능을 지원
- 정규표현식의 도움없이 패턴을 찾는 작업(Rule 기반)은 불완전 하거나, 작업의 cost가 높음
- e.g) 이메일 형식 판별, 전화번호 형식 판별, 숫자로만 이루어진 문자열 등
raw string
- 문자열 앞에 r이 붙으면 해당 문자열이 구성된 그대로 문자열로 변환
import re
a = 'abcde\n'
print(a)
b = r'abcde\n' # row string
print(b)
>> abcde
>>
>> abcde\n
search method
- 첫번째로 패턴을 찾으면 match 객체를 반환
- 패턴을 찾지 못하면 None 반환
m = re.search(r'abc', '123abcdef') # abcdef에서 abc패턴이 있는지 확인
type(m)
print(m.start()) # 패턴이 검색된 위치
print(m.end())
print(m.group())
>> <class 're.Match'>
>> 3
>> 6
>> abc
기본 패턴
-
a, X, 9 등등 문자 하나하나의 character들은 정확히 해당 문자와 일치
- e.g) 패턴 test는 test 문자열과 일치
- 대소문자의 경우 기본적으로 구별하나, 구별하지 않도록 설정 가능
-
몇몇 문자들에 대해서는 예외가 존재하는데, 이들은 틀별한 의미로 사용 됨
- . ^ $ * + ? { } [ ] \ | ( )
-
. (마침표) - 어떤 한개의 character와 일치 (newline(엔터) 제외)
-
\w - 문자 character와 일치 [a-zA-Z0-9_]
-
\s - 공백문자와 일치
-
\t, \n, \r - tab, newline, return
-
\d - 숫자 character와 일치 [0-9]
-
^ = 시작, $ = 끝 각각 문자열의 시작과 끝을 의미
-
\가 붙으면 스페셜한 의미가 없어짐. 예를들어 \.는 .자체를 의미 \\는 \를 의미
-
자세한 내용은 링크 참조 https://docs.python.org/3/library/re.html
m = re.search(r'\d\d', '112abcd119') # 숫자 2개가 나란히 있는지 확인
m
>> <re.Match object; span=(0, 2), match='11'>
m = re.search(r'\d\d\d\w', '112abcd119') # 숫자 2개가 나란히 있는지 확인
m
>> <re.Match object; span=(0, 4), match='112a'>
m = re.search(r'..\w\w', '@#!#abcd119')
m
>> <re.Match object; span=(2, 6), match='!#ab'>
metacharacters (메타 캐릭터)
[] 문자들의 범위를 나타내기 위해 사용
- [] 내부의 메타 캐릭터는 캐릭터 자체를 나타냄
- e.g)
- [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') # [cbm]은 cbm중 하나
>> <re.Match object; span=(0, 3), match='cat'>
re.search(r'[abc.^]aron','abaron') # []안은 모두 or 로 받는다
>> <re.Match object; span=(1, 6), match='baron'>
re.search(r'[^abc]', '##@!') # ^ ~가 아닌 것
>> <re.Match object; span=(0, 1), match='#'>
'📌 Python' 카테고리의 다른 글
Python - 정규표현식 (3) (0) | 2021.01.24 |
---|---|
Python - 정규표현식 (2) (0) | 2021.01.22 |
Python - 복소수 함수 만들기 (0) | 2021.01.21 |
Python - 기본 타입으로 함수 만들기 (0) | 2021.01.21 |
Python - method override, super (0) | 2021.01.20 |