정규 표현식, re 모듈자료구조+알고리즘2021. 6. 19. 03:36
Table of Contents
메타문자
- . ^ $ * + ? { } [ ] \ | ( )
- 메타 문자란 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 말한다.
문자 클래스 [ ]
- 문자 클래스를 만드는 메타 문자인 [ ] 사이에는 어떤 문자도 들어갈 수 있다.
- [ ] 사이의 문자들 중 한 글자를 의미한다.
- 예를들어 [abcd]라면 a, b, c, d 중 한개라는 의미이다.
- [ ] 안의 -는 범위를 의미한다.
- [0-9]라면 0~9 사이 숫자중 하나라는 의미이다.
- [ ] 안의 맨 앞의 ^는 NOT을 의미한다.
- [^0-9]라면 0~9를 제외한 문자 하나를 의미한다.
- 주의사항 ! [ ] 사이에서 ^를 쓰고 싶으면 맨 앞에 쓰면 안됨! NOT을 의미하기 때문
Dot(.)
- .은 줄 바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미한다.
- d.b라는 정규식이 있다고 하면 이 정규식의 의미는 "d + 모든 문자 + b"를 의미한다!
- d[ . ]b 라는 정규식은 "d + . + b"를 의미한다!
- 메타 문자를 그대로 사용하고 싶을 때는 [ ] 안에 넣어서 사용하면 된다!
반복(*)
- * 바로 앞에 있는 문자가 0부터 무한까지 반복될 수 있다는 의미이다!!
- [0-9a-z]* 라는 정규식이 있다면 이 정규식의 의미는 "모든 숫자와 소문자가 0부터 무한까지 반복될 수 있다는 의미이다"
- "1234abcd"와 같은 문자열이 매치된다!
- " "와 같은 공백 문자열되 매치된다!
반복(+)
- + 바로 앞에 있는 문자가 최소 1번이상 반복될 때 사용한다!
- [^0-9]+라는 정규식이 있다면 이 정규식의 의미는 "0-9가 아닌 문자가 적어도 1개 이상 반복됨"을 의미한다!
문자열 시작(^)
- 문자열 시작을 의미한다.
- [^ ]와 혼동하지 말자!
- ^123 이라면 "123"으로 시작하는 문자열을 의미한다.
- "1235657"과는 매치하지만 "124"와는 매치하지 않는다!
문자열 마지막($)
- 문자열의 마지막을 의미한다!
- $duck 이라면 "duck"으로 끝나는 문자열을 의미한다
re 모듈
- 코드 최상단에 re 모듈을 import해서 사용한다.
import re
re.match('패턴', '문자열')
- 문자열의 처음부터 시작하여 패턴과 일치하는 것이 있는 것을 확인하는 메서드
- 아래 코드에서 세번째 결과는 처음부터 검색을 시작할 때 'c' 가 없어서 None이 나온다.
- 함수의 첫번째 인자로 패턴, 두번째 인자로 문자열이 들어간다.
- 세번째 인자로 flag가 있는데 신경 안써도 됩니당ㅋ
import re
print(re.match('[abc]', 'abfc'))
#<re.Match object; span=(0, 1), match='a'>
print(re.match('[abc]+', 'abfc'))
#<re.Match object; span=(0, 2), match='ab'>
print(re.match('c', 'abfc'))
#None
re.search('패턴', '문자열')
- re.match와 다르게 반드시 문자열의 처음부터 일치할 필요가 없다!
- 문자열의 처음 뿐만 아니라 중간부터라도 패턴과 일치되는 부분을 찾는 메서드
import re
print(re.search('[abc]', 'abfc'))
#<re.Match object; span=(0, 1), match='a'>
print(re.search('[abc]+', 'dbfc'))
#<re.Match object; span=(1, 2), match='b'>
print(re.search('c', 'abfc'))
#<re.Match object; span=(3, 4), match='c'>
re.findall('패턴', '문자열')
- 문자열에서 패턴과 일치되는 모든 부분을 "겹치지 않게" 리스트로 반환해줌!
- 3번째 예시와 4번째 예시를 잘 비교해보자!!
import re
print(re.findall('[abc]', 'abfcadf'))
# ['a', 'b', 'c', 'a']
print(re.findall('[abc]+', 'abfcadf'))
# ['ab', 'ca']
print(re.findall('c', 'abcfc'))
# ['c', 'c']
print(re.findall('ddd', 'dddd'))
# ['ddd']
re.sub('패턴', '대체할 문자열', '문자열')
- 패턴과 일치하는 문자열을 대체할 문자열로 바꿔서 리턴해주는 메서드
import re
print(re.sub('[abc]', 'd', 'abfcadf'))
# ddfdddf
print(re.sub('[abc]+', 'd', 'abfcadf'))
# dfddf
print(re.sub('c', 'd', 'abcfc'))
# abdfd
예제) 소문자, 숫자, -, _, . 을 제외한 문자를 모두 지우시오
print(re.sub('[^0-9a-z-_.]', '', '...!@BaT#*..y.abcdefghijklm'))
# ...a..y.abcdefghijklm
'자료구조+알고리즘' 카테고리의 다른 글
heap (heapq 모듈) (0) | 2022.03.22 |
---|---|
순열, 조합 (0) | 2022.03.18 |
프로그래머스-소수구하기 (itertools) (0) | 2021.06.18 |
백준-1012 유기농 배추 (BFS) (0) | 2021.06.09 |
백준-1260번 DFS와 BFS (extendleft) (0) | 2021.06.09 |
@덕구공 :: Duck9s'
주니어 개발자에욤
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!