Data/Python

정규 표현식 (Regular Expression)

뚱요 2021. 7. 8. 14:10
반응형

정규 표현식 (Regular Expression, Regex)

복잡한 문자열을 특정한 규칙이나 패턴을 이용하여 처리하는 것에 사용한다.

텍스트에서 특정 문자열을 검색,치환 , 추출 할 때 사용됩니다. 예를 들어, 웹 페이지에서 유저의 이메일 주소, 휴대폰 번호를 추철하거나 로그파일에서 특정 에러메시지가 들어간 라인들을 찾을 때 정규 표현식을 사용하면 쉽다.

- 특정 프로그래밍 언어에 종속된 문법을 가지지 않으나 특정 언어, 환경에서만 적용가능한 패턴이 존재하긴 한다.

 

1. 모듈

re.compile(pattern, flags=0)

어떤 정규식을 코드 내에서 여러 번 사용하고자 할 때 문자열 패턴을 컴파일하여 정규식 객체(<class '_sre.sre_pattern'="">) 를 만들어 재사용

특히 복잡하고 긴 정규식같은 경우 편리하며 보통 match, search랑 자주 사용됨

re 모듈의 함수는 **re**클래스의 함수도 있지만, 정규식 객체에서 호출하기도 합니다.

re.search(pattern, string, flags=0)

일치하는 첫번째 위치를 찾아서 객체 반환, 없으면 None

re.match(pattern, string, flags=0)

시작하는 부분에서 0개 이상 문자가 저규식과 일치하면 객체 반환, 없으면 None

re.split(pattern, string, maxsplit=0, flags=0)

문자열을 패턴기준으로 나눔

maxsplit기준으로 최대 나누는 분할 횟수 지정 가능

re.split(r'\W+', 'word1, word2, word3.')
#['word1', 'word2', 'word3', '']

 

re.sub(pattern, repl, string, count=0, flags=0)

 

2. 컴파일된 정규식 객체의 어트리뷰트

- re.compile통해서 저장된 정규식 객체는 하단의 어트리뷰트를 갖는다. 위의 함수와 유샇나 경우가 많으나 pos, endpos 매개변수를 옵션으로 받음

- pos, endpos 시작,끝 위치(인덱스)

  • Pattern.search(string[, pos[, endpos]])
  • Pattern.match(string[, pos[, endpos]])
  • Pattern.fullmatch(string[, pos[, endpos]])
  • Pattern.split(string, maxsplit=0)
  • Pattern.findall(string[, pos[, endpos]])

 

3. 패턴

 

4. 유용한 예시

1) email 주소 유효성 검사 정규표현식: '계정@도메인.최상위도메인' 형식

'^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'

- 페턴@패턴.패턴 으로 끝나는 형식 (예. abc@defg.com) 

-. ^: 패턴의 시작
-. $: 패턴의 종료
-. a-zA-Z0-9(알파벳 대소문자와 숫자를 의미)

 

2) 휴대폰 번호 유효성 검사 정규표현식

'\d{3}-\d{3,4}-\d{4}'​

'3자리 숫자 - 3자리에서 4자리 숫자 - 4자리 숫자'

- \d: 숫자

3) 비밀번호 유효성 검사 정규표현식
최소 8 자로 최소 하나의 문자, 하나의 숫자 및 하나의 특수 문자 조합

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@!%*#?&])[A-Za-z\d@!%*#?&]{8,}$"​

 

4) 태그

<.*?>:  < >내에 0개 이상의 값이 들어감

text = "<html><head><Title>제목</head></html>"
       
m1 = re.findall("<.*>", text)
m2 = re.findall("<.*?>", text)

print( m1)  #['<html><head><Title>제목</head></html>']
print( m2)  #['<html>', '<head>', '<Title>', '</head>', '</html>']

 

 

연습하기 좋은 사이트

https://regex101.com/

 

regex101: build, test, and debug regex

Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java. Features a regex quiz & library.

regex101.com

 

출처

 

반응형