[Regular Expression] 파이썬 정규표현식 사용방법

먼저 파이썬은 re 모듈을 코드 상단에 임포트 해야 정규표현식을 사용할 수 있습니다.

import re

파이썬에서 사용할 수 있는 정규표현식 함수는 다음과 같습니다.

함수

설명

findall

정규표현식과 일치하는 모든 문자열을 배열로 반환합니다.

['Python', 'Python']

search

일치하는 결과가 있으면 Match 객체를 반환합니다. Match 객체에는 일치한 문자열과 문자열의 시작, 끝 인덱스 위치 정보가 들어있습니다.

split

정규표현식과 일치하는 패턴을 기준으로 문자열을 나눈 배열을 반환합니다.

sub

정규표현식과 일치하는 문자열(들)을 대상 문자열로 변경합니다.

 

문자열 매칭

문자열 매칭을 하는 함수는 search(), findall() 두 가지가 있습니다. search()는 정규표현식과 일치하는 첫 번째 문자열 정보를 Match 객체로 반환합니다.

findall() 함수는 일치하는 문자열들 모두를 배열로 반환합니다. 반환하는 결과의 타입이 다르므로 사용할 때 주의해야 합니다.

문자열 매칭을 하는 실제 코드는 다음과 같습니다.

str = "I love Python. Python is king."
match = re.search(r"\bP\w+", str)
print(match) // <re.Match object; span=(7, 13), match='Python'>
print(match.span()) // 일치한 문자열의 시작, 끝 인덱스
print(match.string) // 넘겨받은 대상 문자열
print(match.group()) // 일치한 문자열

정규표현식과 일치하는 모든 문자열을 얻고 싶으면 다음처럼 함수를 사용할 수 있습니다.

match = re.findall(r“\bP\w+”, str)


정규표현식 앞의 접두어 r의 의미

파이썬 정규표현식 함수에 정규표현식을 문자열로 넘길 때 r“\bP\w+”처럼 정규표현식 앞에 r문자를 표기하는 것은 역슬래시 문자를 이스케이프 하지 않도록 하는 것입니다.
정규 표현식 메타문자 표현인 역슬래시가 이스케이프 되면 일반 리터럴 문자로 변경되기 때문에 정규표현식의 기능을 상실하게 됩니다. 즉, 입력된 문자열 그대로(“r”aw string) 이스케이프를 하지 말고 넘기라는 뜻입니다.


문자열 바꾸기

sub() 함수를 사용해서 문자열 일괄 변경을 할 수 있습니다. sub() 함수는 문자열 바꾸기를 한 결과 문자열을 반환합니다. sub() 함수의 기본 사용법은 다음과 같습니다.

re.sub(r“정규표현식”, “바꿀문자열”, “대상문자열”)

파이썬 코드로 작성하면 다음과 같이 작성할 수 있습니다.

str = "I love Python. Python is king."
changed = re.sub(r"\bP\w+", "Java", str)
print(changed) // I love Java. Java is king

파이썬 정규표현식 플래그 사용

파이썬은 짧은 표현과 긴 표현 두 가지로 플래그 표시가 가능합니다. 플래그 속성은 정규표현식 함수(들)의 세 번째 파라미터로 설정합니다.

re.search(r“\bP\w+”, str, re.M | re.I)

짧은 표현

긴 표현

설명

re.A

re.ASCII

메타문자 \w, \W, \b, \B, \d, \D, \s, \S로 매칭을 할 때 유니코드 문자 기준으로 문자열 매칭을 하지않고 아스키II 코드만으로 매칭합니다.

이 플래그를 사용하면 \w 메타 문자를 사용한 한글 단어 매칭을 할 수 없습니다.

re.I

re.IGNORECASE

대/소문자를 구분하지 않고 일치 항목을 찾습니다. 영문 대소문자, 또는 대소문자를 구분하는 언어의 대소문자 구분을 무시합니다.

re.M

re.MULTILINE

여러 줄 모드를 사용합니다. 줄 바꿈 문자(\n)로 줄바꿈이 되는 각각의 행 마다 문장 시작과 끝을 한정하는 위치 한정자 ^과 $가 적용되도록 합니다.

re.S

re.DOTALL

한 줄 모드를 사용합니다. 줄 바꿈 문자(\n)을 포함한 모든 문자와 일치하도록 아무 문자 일치 메타 문자(.)의 용도를 변경합니다. 개행 문자를 포함해 전체 문자열이 닷 메타 문자(.) 일치에서 하나의 행으로 인식됩니다.

re.X

re.VERBOSE

정규표현식에 코멘트를 작성할 수 있도록 합니다.

플래그를 사용하면 작성한 코멘트는 정규표현식 파싱에서 제외됩니다.

re.sub(r“\bP\w+#Python매칭”, “Java”, str)

re.L

re.LOCALE

현재 사용 언어를 기준으로 대소문자를 무시합니다.

한글은 대소문자 구분이 없기 때문에 해당이 없습니다.

  • 파이썬의 기본 문자열 비교/매칭 처리가 유니코드이기 때문에, 유니코드 대응을 위한 re.U 플래그는 더이상 사용하지  않습니다.