일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- groupby
- Numpy data I/O
- Python 특징
- 최대가능도 추정법
- type hints
- Numpy
- pivot table
- ndarray
- 부스트캠프 AI테크
- seaborn
- 가능도
- Array operations
- Python
- boolean & fancy index
- python 문법
- unstack
- 카테고리분포 MLE
- dtype
- 표집분포
- Comparisons
- 딥러닝
- 정규분포 MLE
- Python 유래
- VSCode
- Operation function
- linalg
- scatter
- BOXPLOT
- subplot
- namedtuple
- Today
- Total
또르르's 개발 Story
[04-1] Python 정규 표현식(Regular Expression) 본문
오늘 과제를 하면서 정규 표현식(Regular Expression)을 써야 하는 일이 생겼습니다.
그래서 정리해보았습니다.
1️⃣ 정규표현식 (Regular Expression)
정규표현식 regex는 특정한 규칙을 가진 문자열 패턴을 검출해내는데 용이합니다.
특히 Python에는 char형을 하나씩 check하기 위해서 다른 함수를 사용하는 것보다 regex를 사용하는 것이 훨씬 효율적이고 빠릅니다.
하지만 정규식을 처음 보게되면 이해하기가 어렵습니다.
띄어쓰기도 안돼 있고 이상한 특수문자가 여러 개 붙어있어 규칙도 없어 보입니다.
하지만 정규식만큼 문자 패턴 검출이나 문자 교체에서 편한 방법이 없죠.
편한 UI로 정규식을 만들고 싶다면 아래 사이트 추천합니다.
복잡한 regex를 만들 때 어떻게 검출이 되는지 상세하게 알려줍니다.
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
2️⃣ regex 패턴 표현
일단, Python에서 regex를 사용하려면 모듈을 import 해주어야 합니다.
import re
regex의 대표적인 패턴 표현은 아래와 같습니다.
[ ]
문자들의 집합 ( [ ] 사이의 문자들과 매치 )
[a-zA-Z] # 모든 알파벳
[^ ]
문자들을 뺀 문자 집합 ( [ ] 사이에 있는 문자들이 아닌 다른 모든 문자들과 매치 )
[^0-9] # 숫자가 아닌 문자
+
하나 이상 ( 앞 패턴이 하나 이상 )
b+ # b가 하나 이상 있어야함
[0-9]+ # 숫자가 하나 이상 있어야함
[^a-z]+ # 소문자 알파벳이 아닌 문자가 하나 이상 있어야함
*
0개 이상 ( 앞 패턴이 0개 이상 )
c* # c가 없거나 0개 이상 있어야함
[0-9]* # 숫자가 없거나 0개 이상 있어야함
[^a-z]* # 소문자 알파벳이 아닌 문자가 없거나 0개 이상 있어야함
.
줄 바꿈 문자( \n )를 제외한 모든 문자
a.b # a와 b 사이에 모든 문자가 매치
# aYb, aPb 등 모두 가능 (ab와 같이 아예 없는 경우는 불가능)
[0-9].[0-9] # 숫자와 숫자 사이에 모든 문자 가능
?
앞 패턴이 없거나 한 개 존재
[0-9]? # 숫자가 없거나 하나가 있을 수 있음
|
앞 뒤 패턴 중에 하나이어야함 (OR)
a | b # a 또는 b 이어야함
[0-9] | [a-zA-Z] # 숫자 또는 알파벳 이어야함
^
이 패턴으로 시작해야 함 (^ 뒤에 나오는 패턴)
^123 # 123으로 시작해야함
$
이 패턴으로 종료해야 함 ($ 앞에 나오는 패턴)
xyz$ # xyz로 종료해야함
3️⃣ regex 메서드
regex의 패턴 표현을 배웠다면 원하는 문자를 찾거나 추출해야 합니다.
Python에서는 강력한 regex method를 제공합니다.
match( )
문자열의 처음부터 regex와 매치된 부분까지 반환
# 특수문자가 나오기 전까지 match 값
>>> check = re.compile('[^_@#$%^&*\(\)-+=\[\]\{\}\"\';:\\|`~]+') # 특수문자 _@#$%^&*()-+=[]{}"';:\|`~가 아닌 모든 문자
>>> print(check.match("1!23@ a1bc !"))
<re.Match object; span=(0, 4), match='1!23'> # '@' 전까지 검출
>>> re.match('[^_@#$%^&*\(\)-+=\[\]\{\}\"\';:\\|`~]+', "1!23@ a1bc !")
<re.Match object; span=(0, 4), match='1!23'>
search( )
문자열의 전체를 검색하여 regex와 매치된 부분까지 반환
# 특수문자가 있는지 search
>>> check = re.compile('[_@#$%^&*\(\)-+=\[\]\{\}\"\';:\\|`~]+') # 특수문자 _@#$%^&*()-+=[]{}"';:\|`~인 문자
>>> print(check.search("1!23@ a1bc !"))
<re.Match object; span=(4, 5), match='@'> # (4,5) 위치에 @ 검출
>>> re.search('[^_@#$%^&*\(\)-+=\[\]\{\}\"\';:\\|`~]+', "1!23@ a1bc !")
<re.Match object; span=(4, 5), match='@'>
findall( )
regex와 매치된 모든 부분을 list로 반환
# 특수문자가 아닌 값들을 list로 출력
>>> check = re.compile('[^_@#$%^&*\(\)-+=\[\]\{\}\"\';:\\|`~]+') # 특수문자 _@#$%^&*()-+=[]{}"';:\|`~가 아닌 모든 문자
>>> print(check.findall("1!23@ a1bc !"))
['1!23', ' a1bc !'] # '@'를 기준으로 구분
>>> re.findall('[^_@#$%^&*\(\)-+=\[\]\{\}\"\';:\\|`~]+', "1!23@ a1bc !")
['1!23', ' a1bc !']
sub( )
regex와 매치된 부분을 replace
# 특수문자가 있는 부분을 ?로 치환
>>> check = re.compile('[_@#$%^&*\(\)-+=\[\]\{\}\"\';:\\|`~]+') # 특수문자 _@#$%^&*()-+=[]{}"';:\|`~인 문자
>>> print(check.sub('?', "1!23@ a1bc !"))
1!23? a1bc ! # @가 있는 부분을 ?로 치환
>>> re.sub('[_@#$%^&*\(\)-+=\[\]\{\}\"\';:\\|`~]+', '?', "1!23@ a1bc !")
'1!23? a1bc !'
'부스트캠프 AI 테크 U stage > 이론' 카테고리의 다른 글
[06] Python numpy (1) | 2021.01.25 |
---|---|
[05] Python Exception/File/Log /data Handling (0) | 2021.01.22 |
[04] Python의 OOP (객체 지향 프로그래밍) 와 module (모듈) (0) | 2021.01.21 |
[03-1] Pythonic code (0) | 2021.01.20 |
[03] Python data structure (0) | 2021.01.20 |