정규 표현식 (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>']
연습하기 좋은 사이트
출처
'Data > Python' 카테고리의 다른 글
백준 알고리즘[파이썬] 1929번: 소수 구하기 ,1978번: 소수찾기 (0) | 2021.07.22 |
---|---|
[백준 알고리즘] 파이썬 - 1085번: 직사각형에서 탈출 (0) | 2021.07.16 |
백준 알고리즘[파이썬] 2869번: 달팽이는 올라가고 싶다 (0) | 2021.07.04 |
백준 알고리즘 [파이썬] 1193번: 분수찾기 (0) | 2021.07.03 |
백준 알고리즘 [Python] 1712 손익분기점 (0) | 2021.07.02 |