Published 2021. 1. 22. 08:24

정규표현식 

  • 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 (메타 캐릭터)

[] 문자들의 범위를 나타내기 위해 사용

 

  1. [] 내부의 메타 캐릭터는 캐릭터 자체를 나타냄
  2. e.g)
  3. [abck] : a or b or c or k
  4. [abc.^] : a or b or c or . or ^
  5. [a-d] : -와 함께 사용되면 해당 문자 사이의 범위에 속하는 문자 중 하나
  6. [0-9] : 모든 숫자
  7. [a-z] : 모든 소문자
  8. [A-Z] : 모든 대문자
  9. [a-zA-Z0-9] : 모든 알파벳 문자 및 숫자
  10. [^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
복사했습니다!