728x90
re모듈을 통해 사용
import re
문자열에 대한 연산에 사용. 문자열 패턴 표현, 문자열 수정, 분할
많이 쓰는 패턴
패턴 | 설명 |
^패턴 | 이 패턴으로 시작해야 함 |
패턴$ | 이 패턴으로 끝나야 함 |
패턴1|패턴2 | 두 패턴 중 하나 |
. | 줄바꿈(\n)을 제외한 모든 문자 한 개 |
{숫자} {숫자,} {숫자1,숫자2} |
{숫자}일 때 숫자 만큼 반복 {숫자,}일 때 숫자 이상 반복 {숫자1, 숫자2}일 때 숫자1 이상 숫자2 이하 반복 |
* | 0번 이상 반복 = {0,} |
+ | 1번 이상 반복 = {1,} |
? | 하나 있거나 없어야 함 = {0,1} |
* + ? {} 정규식의 매치 결과는 매우 탐욕스러워서 매치할 수 있는 최대한의 문자열을 반환한다.
-> 방지를 위해 ?를 사용
Greedy(최대한 많이 반환) | Lazy(최대한 적게 반환) |
* | *? |
+ | +? |
? | ?? |
{} | {}? |
https://velog.io/@commitnpush/Greedy-Lazy
() 그룹화
(패턴) | 괄호 안의 해당 내용만 캡쳐 |
(패턴1) (패턴2) | 순서대로 그룹1, 그룹2, .. |
(?:패턴) | 캡쳐에서 제외하겠다 |
[] 패턴 한 글자 찾기
[문자들] | []안에 들어있는 문자들 중 하나 |
[^문자들] | []에 들어있는 문자들 제외 문자 하나 |
[문자1-문자2] | 문자1과 문자2 사이의 문자 중 하나 |
알파벳 -> [A-z] / [A-Za-z]
한글 -> [가-힣]
숫자 -> [0-9]
Character Class
소문자와 대문자는 반대라고 생각하면 된다
\d | 숫자 1개 |
\D | 숫자가 아닌 값 1개 |
\s | 공백 1개 |
\S | 공백이 아닌 값 1개 |
\w | 알파벳 또는 숫자 또는 _ 1개 |
\W | 알파벳이나 숫자가 또는 _이 아닌 값 1개 |
Regular expression function
1. search(패턴, 문자열): 문자열 ‘전체’에서 패턴 존재하는지 검사. 결과가 없으면 None 반환. 1개만 찾음
2. match(패턴, 문자열): 문자열 ‘시작’부터 매치 검사. 매칭 결과가 없으면 None 반환
3. findall(패턴, 문자열): 문자열에서 패턴을 만족하는 문자열의 리스트 반환
4. sub(패턴, 교체할 문자열, 문자열): 문자열에서 패턴과 일치하는 부분을 교체
5. split(패턴, 문자열): 지정된 패턴 부분에서 문자열 나눔
6. compile(패턴): 패턴을 컴파일하여 정규식 객체로 반환
re.compile 시 옵션
re.IGNORECASE -> 대소문자 구분 안함
re.MULTILINE -> 여러 줄에 적용
re.search에 그룹화를 하면 group() 사용 가능
groups() | 그룹들을 튜플로 리턴 |
group() | 매치되는 전체 문자열 리턴( group(0)과 동일) |
group(n) | 캡쳐된 n번째 그룹 문자열 리턴 (?:)는 제외 |
data = '홍길동 040312-3858498'
re.sub에서 그룹화 한 것 사용하는 법
\g<1>
\1
# 주민번호 마스킹 하기
# \g<1>과 \1과 같다
masking = re.sub(r'(.+)\s(\d{6})-(\d{7})', r'\g<2>-******* \g<1>', data)
#masking = re.sub(r'(.+)\s(\d{6})-(\d{7})', r'\3-******* \1', data)
print(f"마스킹 전: {data}")
print("마스킹 후 : {masking}")
마스킹 전: 홍길동 040312-3858498
마스킹 후 : 3858498-******* 홍길동
핸드폰 번호 예제
# 핸드폰 번호 형식
num = '''
01043598496
010-4395-2343
02-324-3453
080-335-0020
023243566
'''
re.findall(r'\d{2,3}-?\d{3,4}-?\d{4}', num)
['01043598496', '010-4395-2343', '02-324-3453', '080-335-0020', '023243566']
테스트를 할 수 있는 곳
도움:
https://docs.python.org/ko/3/library/re.html
'Python' 카테고리의 다른 글
[Python] List Comprehensions (0) | 2024.06.23 |
---|---|
[Python] VSCode에서 파이썬 가상환경 만들기 (0) | 2024.06.20 |
[Python] 힙 (1) | 2024.02.05 |
웹 스크래핑으로 인기 급상승 동영상 데이터 저장하기 (1) | 2024.01.22 |
Selenium 사용하여 웹 자동화하기3- 뉴스 기사 스크랩 (5) | 2024.01.17 |