일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Kaggle
- 프로그래머스
- datascience
- wandb
- 완전탐색
- Kubernetes
- rnn
- GIT
- python
- github
- NaverAItech
- PytorchLightning
- torchserve
- NLP
- 백준
- FastAPI
- pep8
- Matplotlib
- 코딩테스트
- leetcode
- vscode
- 네이버AItech
- autoencoder
- FDS
- 알고리즘
- pytorch
- DeepLearning
- docker
- GitHub Action
- GCP
- Today
- Total
Sangmun
정규표현식 기초 python re 모듈 본문
파이썬에서는 정규표현식을 지원하는 re(regular expression) 모듈이 있으며 기본 모듈임으로 따로 설치할 필요는 없다.
정규표현식을 지정해서 아래와 같이 컴파일을 해서 패턴을 지정해 준다.
import re
pattern = re.compile('ab*')
1. RE 모듈 기본 함수
문자열을 검색할 수 있는 함수는 아래와 같이 4개가 있다.
- match() : 문자열의 처음부터 정규식과 매치되는지 조사
- search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사
- findall() : 정규식과 매치되는 모든 substring을 리스트로 리턴
- finditer() : 정규식과 매치되는 모든 substring을 반복 가능한 객체로 리턴
* 예시
아래와 같은 알파벳 소문자가 0부터 ~ 무한대까지 반복될 수 있는 패턴을 만든다고 하면
import re
p = re.compile('[a-z]+')
문자열 'python'은 그에 부합함으로 매치된 결과를 match 객체로 리턴해준다.
m = p.match("python")
print(m)
<re.Match object; span=(0, 6), match='python'>
하지만 '3 python'은 문자열의 시작이 알파벳 소문자가 아닌 '3' 문자열로 시작함으로 매칭이 되지 않아 None을 리턴한다.
m = p.match("3 python")
print(m)
None
반면에 search 함수는 처음부터 검색을 하는 것이 아니라 문자열 전체를 대상으로 검색을 한다.
'3 python' 문자열을 대상으로 매칭이 되는 문자열을 찾아서 리턴을 해주는 결과를 확인할 수 있다.
m = p.search("python")
print(m)
<re.Match object; span=(0, 6), match='python'>
m = p.search("3 python")
print(m)
<re.Match object; span=(2, 8), match='python'>
findall 함수는 매칭이 되는 대상 전부를 찾아서 리스트로 리턴을 해준다.
result = p.findall("life is too short")
print(result)
['life', 'is', 'too', 'short']
finditer 함수는 findall 함수와 같지만 리턴되는 대상이 리스트가 아니라 match 객체로 리턴해주며 iter 하면서 결과를 확인할 수 있다.
result = p.finditer("life is too short")
print(result)
<callable_iterator object at 0x01F5E390>
for r in result: print(r)
<re.Match object; span=(0, 4), match='life'>
<re.Match object; span=(5, 7), match='is'>
<re.Match object; span=(8, 11), match='too'>
<re.Match object; span=(12, 17), match='short'>
2. match 객체의 매써드
re 모듈의 함수를 사용하여 반환된 match객체에는 아래와 같은 함수들을 사용할 수 있다.
- group() : 매치된 문자열을 리턴한다.
- start() : 매치된 문자열의 시작 위치를 리턴
- end() : 매치된 문자열의 끝 위치를 리턴
- span() : 매치된 문자열의 구간을 튜플 형태로 리턴
import re
p = re.compile('[a-z]+')
m = p.match('python')
m.group()
>>'python'
m.start()
>>0
m.end()
>>6
m.span()
(0, 6)
3. 컴파일 옵션
정규 표현식을 사용할 때 컴파일 할때 다양한 옵션을 사용할 수 있다.
- DOTALL(S) -.이 줄 바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록 한다.
- IGNORECASE(I) - 대소문자에 관계없이 매치할 수 있도록 한다.
- MULTILINE(M) - 여러 줄과 매치할 수 있도록 한다. (^, $ 메타문자의 사용과 관계가 있는 옵션이다)
- VERBOSE(X) - verbose 모드를 사용할 수 있도록 한다. (정규식을 보기 편하게 만들 수 있고 주석 등을 사용할 수 있게 된다.
※ 파이썬 re 모듈 모듈단위로 수행하기
위의 예시들은 정규표현식을 컴파일하고 매치를 실시하였으나 축약된 형태로 사용이 가능하다.
# before
p = re.compile('[a-z]+')
m = p.match("python")
# after
m = re.match('[a-z]+', "python")
위와 같이 한 줄에 사용하는 것이 가능하나 특정 패턴 객체를 지속적으로 사용해야 하는 경우에는 위와 같이 컴파일을 하고 실행하는 것이 더 좋다.
'개발 > 정규표현식' 카테고리의 다른 글
정규표현식 심화 (0) | 2023.01.23 |
---|---|
정규표현식 기초 (메타문자) (0) | 2023.01.22 |