여기서 연습 가능
정규표현식
일반 문자열
^hello : 처음에 나오는 hello
hello$ : 마지막에 나오는 hello
h.llo : h 다음에 어떤 문자든 1개의 문자(영문, 특수문자, 숫자, 한글 등)이 오며 llo가 나옴
대괄호(택1)
h[eao]llo : hello, hallo, hollo를 선택.
h[e!ao]llo : hello, hallo, hollo, h!llo 선택.
[a-z] : 알파벳 소문자 중 하나
[a-zA-Z] : 알파벳
[0-9] : 숫자
[가-힣] : 한글 글자
^[a-z] : 알파벳으로 시작하는 문자열
[^a-z] : 알파벳 소문자가 아닌것. (부정)
h[^ao]llo : a, o 모두 아닌것
h[a^o]llo : hallo, h^llo, hollo. ^가 부정으로 쓰려면 대괄호 열고 바로 다음에 나와야함.
수량자
_* : 앞에 있는 문자가 0개 ~ N개
_+ : 앞에 있는 문자가 1개 ~ N개
_? : 앞에 있는 문자가 0개 ~ 1개
{3} : 앞에 있는 문자가 3개
{3,} : 앞에 있는 문자가 3개 이상
{1, 3} : 앞에 있는 문자가 1개 ~ 3개
캐릭터 클래스
\w : 워드(한글은 잡히지 않음)
\W : not 워드
\d : 숫자
\D : not 숫자
\s : 스페이스
\S : not 스페이스
이스케이프 문자
\[.*\] : 대괄호 안에 감싸여진 문자열
\(.*\) : 소괄호 안에 감싸여진 문자열
\\.*\/ : \와/로 감싸여진 문자열
\^\^ : ^^
:\) : :)
정규표현식에서 자주 사용되는 패턴
compile() : 패턴 컴파일
sub() : 매치된 부분을 치환 (str의 replace와 비슷)
findall() : 매치된 부분 모두 리스트로 반환
finditer() : 매치되는 모든 문자열을 반복 가능한 객체로 반환
split() : 정규식 패턴으로 문자열을 분할
import re
pattern = re.compile(r'정규표현식')
pattern.findall('문자열')
mylist = re.findall('정규표현식', '문자열') # 이렇게도 쓸 수 있다.
new문자열 = re.sub(r'정규표현식', '', '문자열')
정규표현식 그룹 패턴
나중에 다시 공부하기.
https://school.programmers.co.kr/learn/courses/30/lessons/120956?language=python3
위 문제에서 배열에서 aya또는 ye또는 woo또는 ma로만 반복되는 문자를 찾고싶은데,
re.findall(r'(aya|ye|woo|ma)+', i) 하니까 반복되는 문자가 아니라 ye, ma 이런식으로만 나옴.
알고보니까 괄호() 가 그룹화 및 캡쳐 기능을 해서 그런것.
캡쳐를 하고싶지 않으면 (?: 패턴)을 사용할것
import re
b = ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]
for i in b:
answer = re.findall(r'(?:aya|ye|woo|ma)+', i)
print(answer)
# ['ayaye']
# ['ma']
# ['ye']
# ['yemawoo']
# ['aya']
'Python' 카테고리의 다른 글
Python 실습 - 핫딜 크롤링 해보기 (0) | 2023.09.24 |
---|---|
Python(20) BeautifulSoup 크롤링 (0) | 2023.09.22 |
Python(18) f-string 문법 (0) | 2023.09.21 |
Python(17) args, kwargs, 이터레이터와 제너레이터 (1) | 2023.09.20 |
Python(16) 일급 함수와 고차 함수, 클로저, 데코레이터 (0) | 2023.09.20 |