정규식

몽자비루 ㅣ 2023. 4. 17. 13:41

 

import re

def print_match(m):
    if m:
        print(m.group())
    else:
        print("매칭되지 않음.")

# . : 하나의 문자를 의미함.
# (ca.e) : cake, care, case ...
# ^ : 문자열의 시작
# (^de) : desk, demention, dev ...
# $ : 문쟈열의 끝
# (se$) : case, rase, base ...

# p에 ca.e의 패턴을 입력함.
p = re.compile("ca.e")

# 텍스트의 문자열의 처음부터 p패턴과 일치하면 match객체를 m에 삽입.
# 일치하지 않으면 `None`이 삽입됨
m = p.match("good care")

# 매칭되지 않으면 m.group() 출력 시, 에러가 발생함.
print_match(m)

# 주어진 문자중에 일치하는 것이 있는지 확인
m = p.search("good care")
print_match(m)

m = p.search("careless")
# 일치하는 문자열을 반환함
print("m.group() : ",m.group())
# 입력받은 문자열을 반환함 (string은 함수가 아니라 변수)
print("m.string : ",m.string)
# 입력받은 문자열의 시작 index
print("m.start() : ",m.start())
# 입력받은 문자열의 끝 index
print("m.end() : ",m.end())
# 입력받은 문자열의 시작/끝 index
print("m.span() : ",m.span())

# findall : 일치하는 모든것을 리스트 형태로 반환
lst = p.findall("good care case")
print(lst)

# finditer
lst = p.finditer("good care case")
print(lst)

# 문자 클래스 : [ ] 사이의 문자들과 매치
# [a-zA-Z] : 알파벳 모두
# [0-9] : 숫자 = /d <-> [^0-9], /D
p = re.compile("[a-z]+")
m = p.search("test")
print(m)

# 반복 : * or + 바로 앞의 문자를 반복함
# ca*t : ct ~ caaaa ... at 까지 매치됨 (a 반복횟수 0회부터)
# ca+t : cat ~ caaa ... at 까지 매치됨 (a 반복횟수 1회부터)
# ca{n,m}t : c(a * n~m회)t 까지 매치됨
# 다만, {}안의 숫자가 한개일 때 정해진 횟수만큼만 반복되어야 함
# ca?t : a 가 있어도 되고 없어도 된다 (=ca{0,1}t)

1. 정규 표현식

  • . : 하나의 문자를 의미함. // (ca.e) : cake, care, case ...
  • ^ : 문자열의 시작 // (^de) : desk, demention, dev ...
  • $ : 문자열의 끝 (se$) // case, rase, base ...
  • 문자 클래스 : [ ] 사이의 문자들과 매치
    ㄴ [a-zA-Z] : 알파벳 모두
    ㄴ [0-9] : 숫자 = /d <-> [^0-9], /D
  • 반복 : * or + 바로 앞의 문자를 반복함
    ㄴ ca*t : ct ~ caaaa ... at 까지 매치됨 (a 반복횟수 0회부터)
    ㄴ ca+t : cat ~ caaa ... at 까지 매치됨 (a 반복횟수 1회부터)
    ㄴ ca{n,m}t : c(a * n~m회)t 까지 매치되며, {}안의 숫자가 한개일 때 해당 횟수만큼만 반복
    ㄴ ca?t : a 가 있어도 되고 없어도 된다 (=ca{0,1}t)

2. 문자열 검색

  • p = re.compile(정규표현식) : p에 정규표현식의 패턴을 입력함
  • m = p.match(텍스트) : 텍스트 문자열 처음부터 패턴과 일치하면 match객체를 m에 삽입.
    ㄴ 일치하지 않으면 None이 삽입됨
  • m = p.search(텍스트) : 주어진 문자중에 일치하는 것이 있는지 확인 후 문자열 반환
  • lst = p.findall(텍스트) : 텍스트 내 패턴과 일치하는 모든 문자열을 리스트 형태로 반환
  • lst = p.finditer(텍스트) : 텍스트 내 패턴과 일치하는 모든 문자열을 match객체로 반환

'python > python_selenium' 카테고리의 다른 글

BeautifulSoup4 활용2  (0) 2023.04.22
BeautifulSoup4 활용1  (0) 2023.04.19
BeautifulSoup4 기본  (0) 2023.04.18
user agent  (0) 2023.04.17
웹스크래핑에 필요한 이론  (0) 2023.04.16