Super Kawaii Cute Cat Kaoani

Python/Python Study

파이썬 정규 표현식 - 1

zozni 2021. 1. 17. 22:03
728x90
반응형
SMALL

정규 표현식

정규 표현식이란 복잡한 문자열을 처리할 때 사용하는 기법이다.  (모든 언어 공통.)

 

정규 표현식이 왜 필요한가?

출력 결과

그냥 문제를 풀면 이렇게 복잡하게 풀어야 한다. ㅠㅠ

 

똑같은 문제를 정규 표현식을 이용해서 해결하게 되면

출력 결과

이렇게 아주 간단하게 작성이 가능하다.

 

문자열에 관련된 복잡한 문제를 해결해야 할 때

정규 표현식을 사용하게 되면 짧고 간결하게 문제를 해결할 수 있게 해준다.

 

문자열의 규칙을 찾아서 어떤 거와 일치하는 거를 뭐로 바꿔라 이런 문제를 처리할 때 주로 사용한다.

그래서 이 문자가 어떤 규칙에 매치가 되는지 검사하는 여러가지 수식들이 있다.

 

 

문자 클래스 []

[ abc ]

- [] 사이의 문자들과 매치

- "a"는 정규식과 일치하는 문자인 "a"가 있으므로 매치

- "before"는 정규식과 일치하는 문자인 "b"가 있으므로 매치

- "dude"는 정규식과 일치하는 문자인 a,b,c 중 어느 하나도 포함하고 있지 않으므로 매치되지 않음

- 하이픈을 사용하여 From-To로 표현 가능

    ex) [a-c] = [abc], [0-5] = [012345]

 

 

 

Dot( . ) - 점

a . b

- 줄바꿈(\n)을 제외한 모든 문자와 매치

- "aab"는 가운데 문자 "a"가 모든 문자를 의미하는 '.'과 일치하므로 정규식과 매치.

- "a0b"는 가운데 문자 "0"가 모든 문자를 의미하는 '.'과 일치하므로 정규식과 매치.

- "abc"는 "a"문자와 "b"문자 사이에 어떤 문자라도 하나는 있어야 하는

   이 정규식과 일치하지 않으므로 매치되지 않는다.

 

 

 

반복( * )

ca*t

- "ct"는 "a"가 0번 반복되어 매치

- "cat"는 "a"가 0번 이상 반복되어 매치 (1번 반복)

- "caaat"는 "a"가 0번 이상 반복되어 매치 (3번 반복)

 

 

 

반복( + )

ca+t

- "ct"는 "a"가 0번 반복되어 매치되지 않음

- "cat"는 "a"가 1번 이상 반복되어 매치 (1번 반복)

- "caaat"는 "a"가 1번 이상 반복되어 매치 (3번 반복)

 

 

 

반복({m,n}, ?)

ca{2}t

-> a가 딱 2번이라는 뜻.

- "cat"는 "a"가 1번만 반복되어 매치되지 않음

- "caat"는 "a"가 2번 반복되어 매치

 

ca{2,5}t

- "cat"는 "a"가 1번만 반복되어 매치되지 않음

- "caat"는 "a"가 2번 반복되어 매치

- "caaat"는 "a"가 3번 반복되어 매치

- "caaaaat"는 "a"가 5번 반복되어 매치

 

ab?c

- b가 0회 혹은 1회를 나타내는 표현

- "abc"는 "b"가 1번 사용되어 매치

- "ac"는 "b"가 0번 사용되어 매치

 

? == {0,1}와 같은 표현

 

 

 

 

 

 

파이썬에서 정규 표현식을 지원하는 re 모듈

p -> 패턴 객체 

이렇게 만든 패턴 객체를 이용하는 방법이 4가지가 있다. 

Match, Search, Findall, Finditer

 

Match

매치가 되는 경우
출력 결과

 

매치가 안되는 경우
출력

 

 

 

search

매치되는 경우 출력 결과

 

매치가 안되는 경우 출력 결과

search는 검색하다 여서 꼭 첫 번째가 일치하지 않아도 일치하는 구문이 있다면 일치하는 걸 찾아서 match 객체를 리턴해준다.

 

 

 

 

 

findall

일치하는 string을 리스트에 담아서 리턴해준다.

 

 

 

finditer

출력 결과

iterator object가 리턴이 된다.

 

즉, 

match 되는 문자열을 다 match 객체 형태로 반복 가능한 객체 하나로 리턴한다.

 

 

 

 

match 객체의 메소드 1

match 객체에는 크게 4가지 메소드가 있다.

출력 결과

 

 

 

 

컴파일 옵션, DOTALL, S

컴파일할 때 옵션을 줄 수가 있다.

매치가 안되기 때문에 출력 결과가 None이 나옴.

 

DOTALL 옵션을 추가함.
줄바꿈 문자가 있어도 객체가 매치되서 나온 것을 확인.

즉, Dot( . ) 문자가 줄바꿈 문자도 포함하도록 만드는 옵션이다.

DOTALL로 써도 되고 약어인 S을 사용해도 똑같다.

 

컴파일 옵션, IGNORECASE, I

옵션 추가시 대소문자를 무시하고 
모두 다 매치가 된 것을 확인.

즉, 대소문자를 다 무시하고 매치할 수 있도록 해주는 옵션이다.

 

 

컴파일 옵션, MULTILINE, M

^는 맨처음이라는 뜻.

\s : 공백을 나타내는 문자

\w : 알파벳, 숫자, _중의 한 문자

 

즉, 맨 처음에 python이라는 글자가 나오고 공백, 단어가 여러번 반복되는거 이런 표현으로 findall을 하면

이런 출력 결과를 얻는다.

근데 여기에 multiline 옵션을 주게되면 

새로운 줄에 맨처음으로 인식하는 애들이 다 출력됨.

즉, multiline은 꺽쇄(^)를 맨 처음만이 아닌 각 라인의 처음으로 인식시키는 옵션이다.

 

 

 

컴파일 옵션, VERBOSE, X

긴 정규 표현식이 있을 때 좀 나눠서 쓸 수 있게 만들어주는 옵션이다.

원래는 정규표현식을 줄바꿈으로 나누게 되면 컴파일이 되지 않는다.

이런걸 공백들을 다 제거해줘서 컴파일 할 수 있도록 만들어주는 옵션이다.

이렇게 알아보기 쉽게!

 

 

 

728x90
반응형
LIST

'Python > Python Study' 카테고리의 다른 글

파이썬 정규 표현식 - 3  (0) 2021.01.22
파이썬 정규 표현식 - 2  (1) 2021.01.19
파이썬 프로그램 - 6  (0) 2021.01.17
파이썬 프로그램 - 5  (0) 2021.01.17
파이썬 프로그램 - 4  (0) 2021.01.16