본문 바로가기

Programming

정규표현식 / 파이썬 예제 (re)

728x90
반응형

분석 또는 개발을 진행하면서 특정 규칙에 해당하는 문자열을 추출해야 할 경우가 가끔씩 생긴다. 자연어 분석을 메인으로 하지 않는다면 그 빈도가 어쩌다 한 번이다 보니 그때그때 정규 표현식 내용 확인 및 예제를 찾아보는데 시간을 들이게 된다. 그 시간을 줄여보고자 정규표현식과 파이썬에서의 적용에 대해 정리한다.


정규식 문법

Meta 문자

  • 정규 표현식에서 사용되는 기호를 뜻함. 표현식에서 내부적으로 특정 의미를 가지는 문자를 말함.
  • 예약어로 이해

^x : 문자열의 시작. x문자로 시작됨을 의미

p = re.compile('^@')
msg = p.search('@ssesaa.')
print(msg.string)

@ssesaa.

x$ : 문자열의 종료. x문자로 종료됨을 의미

p = re.compile('@$')
msg = p.search('ssesaa.@')
print(msg.string)

ssesaa.@

.x :  임의의 한 문자의 자릿수 표현. 문자열이 x로 끝나는 것을 의미

x+ 반복을 표현. x문자가 한번 이상 반복

p = re.compile('@#+')
msg = p.search('@swe a@##')
print(msg.string)

@swe a@##

x? : 존재 여부를 표현. x문자가 존재할 수도, 존재하지 않을 수도 있음을 의미

p = re.compile('@#?')
msg = p.search('@swe a#')
print(msg.string)

@swe a#

x|y : or을 표현. x 또는 y문자가 존재함을 의미

p = re.compile('sas|saf')
msg = p.search('saflls')
print(msg.string)

saflls

(x) : 그룹을 표현. x를 그룹으로 처리

(x)(y) : 그룹들의 집합을 표현. 앞에서부터 순서대로 번호를 부여해서 관리

(x)(?:y) : 그룹들의 집합에 대한 예외. 그룹 집합으로 관리되지 않음을 의미

x{n} : 반복을 표현. x문자가 n번 반복

x{n,} :  반복을 표현. x문자가 n번 이상 반복

x{n,m} :  반복을 표현. x문자가 최소 n번 이상, 최대 m번 이하로 반복


Meta 문자의 특수 케이스

[xy] : 문자 선택을 표현. x, y 중에 하나

[^xy] : not을 표현. x 및 y를 제외한 문자를 의미

[x-y] : range를 표현. x~z 사이의 문자를 의미

\^  : escape. ^를 문자로 사용

\b : word boundary. 문자와 공백 사이의 문자

\B : non word boundary. 문자와 공백 사이가 아닌 문자

\d : digit, 숫자를 의미

\D : non digit. 숫자가 아닌 것을 의미

\s : space. 공백 문자를 의미

\S : non space. 공백 문자가 아닌 것을 의미

\t : tab. 문자

\v : vertical tab. 수직 탭

\w : word. 알파벳+숫자+_ 중의 한 문자

\W non word. 알파벳+숫자+_ 가 아닌 문자를 의미


Flag

Flag를 사용하지 않으면 문자열에 대한 검색을 단일로 처리하고 종료

g : global. 대상 문자열 내의 모든 패턴 검색

i : ignore case. 대상 문자열에 대해 대/소문자 식별하지 않음

m : multi line. 대상 문자열이 다중 라인이어도 검색

 


파이썬 사용

re.compile(pattern, flags=0) : 정규식 패턴을 정규식 객체로 컴파일. 정규식이 단일 프로그램에서 여러 번 사용 시 compile을 사용하고 결과 정규식 객체를 사용하는 것이 효율적

p = re.compile('^asf')
m = p.match('asfees')
print(m.string)

re.search(pattern, string, flags=0) : string을 통해 스캔, pattern이 일치하는 첫 번째 위치를 찾아 대응하는 일치 객체 반환.

p = re.compile('^asf')
m = re.search(p, 'asfees')
print(m.string)

re.match(pattern, string, flags=0) : string 시작 부분에서 0개 이상의 문자가 정규식 pattern과 일치하면 해당 일치 객체를 반환.

re.fullmatch(pattern, string, flags=0) : 전체 string이 정규식 pattern과 일치하면 해당하는 일치 객체 반환.

re.split(pattern, string, maxsplit=0, flags=0) : string을 pattern으로 나눔.

re.split(r'\W+', 'Words, words, words.')
re.split(r'(\W+)', 'Words, words, words.')
re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)

re.finditer(pattern, string, flags=0) : string에서 겹치지 않는, RE pattern의 모든 일치를 일치 객체를 산출하는 이터레이터로 반환

re.escape(pattern) : pattern에서 특수 문자를 이스케이프 처리.

print(re.escape('https://www.python.org'))

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

 

re — 정규식 연산 — Python 3.10.5 문서

re — 정규식 연산 소스 코드: Lib/re.py 이 모듈은 Perl에 있는 것과 유사한 정규식 일치 연산을 제공합니다. 패턴과 검색 할 문자열은 모두 유니코드 문자열(str)과 8비트 문자열(bytes)이 될 수 있습니

docs.python.org

 

728x90
반응형

'Programming' 카테고리의 다른 글

파이썬 로그 핸들링  (0) 2022.08.01
파이썬 예외처리  (0) 2022.08.01
Black을 이용한 코드 스타일 맞추기  (0) 2022.07.14
[Library] Dask 추가 정보 및 테스트  (0) 2022.07.10
[Library] Dask? Spark?  (0) 2022.07.05