관심 1/Python

파이썬 정규표현식

give_me_true 2023. 7. 10. 00:06

정규 표현식

\d : 숫자
\w : 숫자, 문자
\s : whitespace [ \t\n\r\f\v]
\D, \W, \S 는 반대
. : \n 제외 모든 문자
* : 앞 문자가 0~무한 반복
+ : 앞 문자가 1번 이상 반복
? : 0번 또는 1번. {0,1} 랑 동일

반복 횟수 정하기

  • {m,n} : m 이상 n 이하 반복. m, n 은 생략 가능
  • {2,} : 두번 이상
  • {,2} : 두번 이하
  • {2} : 두번

파이썬 정규 표현식

import re
p = re.compile('bc*') # bc* 를 컴파일해서 컴파일 된 패턴 객체를 리턴 함
# 패턴이란 정규식을 컴파일 한 결과

컴파일 된 패턴 객체

  • match() : 문자열의 처음부터 매치되는지 확인
  • search() : 문자열 전체 확인
  • findall() : 매치되는 모든 문자열을 리스트로 반환
  • finditer() : 매치되는 모든 문자열을 반복 가능한 객체로 리턴
import re
p = re.compile('[a-z]+')

# match : 문자열의 처음부터 매치되는지 확인
m = p.match("hello") # 결과는 match 객체 또는 None

# search : 문자열 전체 확인
s = p.search("hi hello")

# findall : 모든 값을 찾아 리스트로 반환
f = p.findall("hi hello world") # 결과는 리스트

# finditer : 결과를 iterator object 로 반환
f = p.finditer("hi hello world")

 

match 객체

  • group : 매치 문자열 반환
  • start : 시작 위치
  • end : 끝 위치
  • span : (시작, 끝) 튜플 반환
m.group() # 'hello'
모듈 단위
p = re.compile('[a-z]+')
m = p.match('hello') # 객체를 여러번 사용할 때 이렇게 수행
축약 단위
m = re.match(['a-z]+', 'hello')

 

컴파일 옵션

  • DOTALL, S : 줄바꿈 문자 포함
  • IGNORECASE, I : 대소문자 구분 안함
  • MULTILINE, M : 여러 줄 매치, ^랑 $와 함께 사용
  • VERBOSE, X : 정규식을 보기 편하게
p = re.compile('[a-z]+, re.DOTALL)
p = re.compile('[a-z]+, re.S)

 

역슬래시

p = re.compile('\\hello') # \hello
p = re.compile(r'\\hello') # \\hello

 

| : or. A|B 는 A 또는 B랑 매치되는 것
^ : 문자열 맨 처음과 일치
$ : 문자열 마지막과 일치
\A : 줄과 상관 없이 문자열의 맨 처음과 일치. re.MULTILINE 에 유의
\Z : 줄 상관 없이 문자열 마지막과 일치
\b : 단어 구분자. word boundry 로 whitespace 로 구분. \B 는 반대

 

그루핑

  • (ABCD)+ 로 세트로 사용 가능
  • 단어의 경우 \w+ 를 (\w+) 로 설정한 다음 첫번째 그룹이랑 매치되면 group(1) 로 사용
  • group(0) 은 전체
  • 재참조는 \1 로 사용 가능하며 첫번째 그룹
  • 그룹에 이름 짓기 : (?<name>..) 로 사용. 재참조 시에는 (?P=name)
  • 사용은 (\w+) 를 (?P<name>\w+)

전방 탐색

  • 긍정형 전방 탐색 : (?=...) → ... 는 검색에 사용되지만 결과에는 포함 안됨
  • 부정형 전방 탐색 : (?!...) → ... 조건은 결과에서 제외함

문자열 바꾸기

  • sub 메서드 사용. 
  • p.sub('바꿀문자열', '대상문자열', count=1)
  • 참조로 바꿀 수 있음
  • p.sub("\g<name1> \g<name2>", "대상문자열")

 

 

 

 

ref. https://docs.python.org/3/library/re.html

ref. https://wikidocs.net/4308

ref. https://wikidocs.net/4309