정규 표현식
정규 표현식이란 복잡한 문자열을 처리할 때 사용하는 기법이다. (모든 언어 공통.)
정규 표현식이 왜 필요한가?
그냥 문제를 풀면 이렇게 복잡하게 풀어야 한다. ㅠㅠ
똑같은 문제를 정규 표현식을 이용해서 해결하게 되면
이렇게 아주 간단하게 작성이 가능하다.
문자열에 관련된 복잡한 문제를 해결해야 할 때
정규 표현식을 사용하게 되면 짧고 간결하게 문제를 해결할 수 있게 해준다.
문자열의 규칙을 찾아서 어떤 거와 일치하는 거를 뭐로 바꿔라 이런 문제를 처리할 때 주로 사용한다.
그래서 이 문자가 어떤 규칙에 매치가 되는지 검사하는 여러가지 수식들이 있다.
문자 클래스 []
[ 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
컴파일할 때 옵션을 줄 수가 있다.
즉, Dot( . ) 문자가 줄바꿈 문자도 포함하도록 만드는 옵션이다.
DOTALL로 써도 되고 약어인 S을 사용해도 똑같다.
컴파일 옵션, IGNORECASE, I
즉, 대소문자를 다 무시하고 매치할 수 있도록 해주는 옵션이다.
컴파일 옵션, MULTILINE, M
^는 맨처음이라는 뜻.
\s : 공백을 나타내는 문자
\w : 알파벳, 숫자, _중의 한 문자
즉, 맨 처음에 python이라는 글자가 나오고 공백, 단어가 여러번 반복되는거 이런 표현으로 findall을 하면
이런 출력 결과를 얻는다.
근데 여기에 multiline 옵션을 주게되면
즉, multiline은 꺽쇄(^)를 맨 처음만이 아닌 각 라인의 처음으로 인식시키는 옵션이다.
컴파일 옵션, VERBOSE, X
긴 정규 표현식이 있을 때 좀 나눠서 쓸 수 있게 만들어주는 옵션이다.
원래는 정규표현식을 줄바꿈으로 나누게 되면 컴파일이 되지 않는다.
이런걸 공백들을 다 제거해줘서 컴파일 할 수 있도록 만들어주는 옵션이다.
'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 |