정의
복잡한 문자열을 처리할 때 사용하는 기법
임포트
import re |
(대표적) 치환 메서드
② 를 사용하자
① result = re.sub(r정규표현, 치환문자(열), 대상문자열) ② regex = re.complie(r정규표현, re.MULTILINE ) ※ 대상문자열이 개행을 포함하고 있다면 re.MULTILINE으로 행을 구분 result = regex.sub(치환문자(열), 대상문자열 ) |
r " " 은 raw 를 의미하며 " " 안의 특수기호(개행문자등)를 문자로써 표현
[ ] 안에 있는 문자 개별로 존재하면 치환, 삭제
regex = re.compile(r'[346]') str1 = regex.sub('x', '03-5454-68284') -> '0x-5x5x-x828x' |
참조 | 별도 표기 | ||
[0-9] | \d | 0~9 중 하나라도 | |
[^0~9] | ^ 은 NOT | \D | 비(非)숫자중 하나라도 |
[a-zA-Z] | 알파벳중 하나라도 | ||
[ \t\n\r\f\v] | \s | 화이트스페이스 | |
[^ \t\n\r\f\v] | ^ 은 NOT | \S | 화이트스페이스가 아니라면 |
[a-zA-Z0-9_] | \w | 문자 숫자중 하나라도 | |
[^a-zA-Z0-9_] | ^ 은 NOT | \W | 비(非)문자 숫자중 하나라도 |
[문자] | 문자만 |
기타
.(dot) | "a.b" | "a"+모든문자+"b" | \n 을 제외한 모든 문자가 1개면 OK |
[.] | "a[.]b | "a"+".(dot)" + "b" | 가운데 반드시 .(dot) 이 존재해야 OK |
* | "ca*t" | ct/cat/caat/... | *의 바로직전 문자가 0번 혹은 무한반복되면 OK |
? | "ca?t" | ct/cat | ?의 바로직전 문자가 0번 혹은 1번 반복되면 OK |
+ | "ca+t" | cat/caat/caaat/... | +의 바로직전 문자가 1번이상 반복되면 OK |
{n} | "ca{2}t" | caat | {}의 바로직전 문자가 반두시 n번 반복되면 OK |
{m,n} | "ca{2,5}t" | 반복횟수의 범위 | {}의 바로직전 문자가 2회 혹은 3회 혹은 4회 혹은 5회 반복되면 OK |
| | "abc|def" | 혹은(or) | "abc" 혹은 "def" 가 포함되면 OK |
^ | "^My" | (개행)맨처음시작 | "My" 로 문자열이 시작하면 OK |
$ | "you$ " | (개행)맨마지막 | "you"로 문자열이 끝나면 OK |
\A | "\AMy" | re.MULTILINE 옵션 전체 문자열의 시작 |
|
\Z | "\Zyou" | re.MULTILINE 옵션 전체 문자열의 마지막 |
|
\b | "\b단어\b | = 스페이스 | " 단어 " 가 있으면 OK |
( ) | "(ABC)" | 그룹 | regex.group(n번째그룹) 으로 특정( ) 의 내용만 끄집어 낼 수 있다. |
(?: ) |
"(?:ABC)" | 비그룹 | regex.group(n번째그룹) 에 포함되지 않는다. |
\ | "\*" | * 는 반복이 아닌 문자 | 위의 메타문자를 무효화하고 단순히 문자로 취급 |
r"(\w+)\s+(\d+[-]\d+[-]\d+)"
[문자숫자가 1개이상] [스페이스 1개이상] [숫자가 1개이상] - [숫자가 1개이상] - [숫자가 1개이상]
Abc 3643-482-2
regex.group(2) -> 3643-482-2
string = "ftp://www.abc.com/over/article/image.jpg"
ftp 로 시작해서 jpg 로 끝나는지 확인
re.match(r'(ftp|http)://.*\.(jpg|png)$', string)
고정 ftp(혹은 http):// | .(dot) 모든문자가 가능 | * 모든문자가 0 혹은 복수존재 가능 | 점 문자한개 | jpg나png로 끝나면 OK
string = "Your number is <b>123</b>
123 숫자만 추출
number = re.search(r"\d+", string) 아무숫자(\d)가 1번이상 반복
number.group() -> '123'
전화번호 패턴 매치
(404) 666-1111 True (404) 6661111 True 404-666-1111 True 404-6661111 True 404666-1111 True 4046661111 True (404) 666-1111 True (404)666-1111 True 404-666-1111 True 404-6661111 True 4046661111 True |
result = re.match('^\s*(?:\(\d{3}\)\s* | \d{3})-?\d{3}-?\d{4}\s*$', telnumbes)
^\s* 스페이스로 시작할 수도 없을 수도 있고 스페이스는 있어도 되고 없어도 되고
(?: ) 그룹핑하지 않고 묶음으로 처리
\(\d{3}\) () 은 그룹핑이 아닌 문자이고 (3자리 숫자가 필수)
\s* 스페이스는 있어도 되고 없어도 되고
| 혹은
\d{3} 숫자3개
-? 하이픈은 없어도 되고 1번 있어도 되고
\d{3} 숫자3개
-? 하이픈은 없어도 되고 1번 있어도 되고
\d{4} 숫자4개
\s* 스페이스는 있어도 되고 없어도 되고
$ 스페이스로 끝나거나 숫자4개로 끝나거나
'data science > python' 카테고리의 다른 글
여러 단어를 한 단어로 바꿔치기 (1) | 2025.02.11 |
---|---|
반복되는 특정 단어를 복수 단어로 바꿔치기 (0) | 2025.02.11 |
*args and **kwargs (불특정 수의 함수인수) (0) | 2025.02.02 |
(Colab) Youtube 영상을 mp3 화일로 다운로드 (0) | 2025.02.01 |
lambda, map, filter, reduce (0) | 2025.01.25 |