Python

Python(19) 정규표현식

UserDonghu 2023. 9. 22. 20:39

https://regexr.com/5nvc2

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

여기서 연습 가능

 

정규표현식

일반 문자열

^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 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

위 문제에서 배열에서 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']