일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- tensorflow update
- 이미지 생성
- #일상영어
- 완전탐색
- #영어
- 영어명언
- 영어
- convexhull
- 딥러닝
- c언어
- keras
- word embedding
- opencv SURF
- #프로젝트
- tokenizing
- text2img
- #실생활 영어
- #English
- python list
- python __init__
- #opencv
- #실생활영어
- #영어 명언
- #Android
- python 알고리즘
- #1일1영어
- findContours
- TensorFlow
- object detection
- Convolution Neural Network
Archives
- Today
- Total
When will you grow up?
Python을 이용한 정규표현식(regular expression) 본문
정규표현식은 'regex' 표현하기도 하며, 특정한 규칙을 가진 문자열을 집합을 표현하는 데 사용하는 형식 언어이다. 그래서 python 뿐만 아니라 모든 언어에서 정규표현식을 지원하며, 언어별로 큰 틀은 비슷하지만 조금씩 사용방법이 달라 이참에 간단하게 python을 이용하여 정리하였다.
나는 기본적으로 데이터 크롤링과정이나 json포맷을 뭔가 전처리를 하고 싶을 때 이용하는 편이고, 특히 문자열을 다룰 때 정말 유용한 거 같다.
meta string | explain |
[string1, string2, ...] | [] 안에 있는 문자들이 존재하는 지 검색 |
.{m, n} | m회 이상 n회 이하를 표현할때 사용 |
() | ()는 grouping 이며 추출할 패턴을 지정 |
. |
\n(Escape Character)를 제외한 모든 문자와 match ( .은 글자 하나를 의미) |
* | 0회 이상 반복 (없어도 괜찮다) |
+ | 1회 이상 반복 (무조건 한번 이상 등장해야 함) |
| | or 조건식을 의미 |
^ | 문자열의 시작 의미 |
$ | 문자열의 끝 의미 |
그 외에도, ? \ 등 다양한 메타 문자열이 많으니 필요시 위키를 확인 : 클릭
정규식 - python 에서는 re 모듈을 이용한다.
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
|
import re # 정규표현식 모듈
r = re.compile('[ab]') # re내장모듈 compile 함수 이용
r.search('hamburger') # 문자열 전체에서 정규식에 부합하는 문자열이 있는지 검색 / 문자열 전체에서 찾음
# <_sre.SRE_Match object; span=(1, 2), match='a'> # 존재시 처음 찾은 정보 출력(match object)
r.match('hamburger') # 문자열의 처음이 정규식과 부합하는지 검색 / 문자열의 처음만 비교
# <None>
r = re.compile("ck+w") # + --> 바로 앞글자가 1개이상 인 것
print(r.search("ckw")) # <_sre.SRE_Match object; span=(0, 3), match='ckw'>
print(r.search("ckkkkkw")) # <_sre.SRE_Match object; span=(0, 7), match='ckkkkkw'>
print(r.search("ckkk")) # None
print(r.search("cw")) # None
r = re.compile("a.c") # . --> 임의의 한문자
#즉, a문자뒤 임의의 한문자, 그 뒤 c가 있는 것
print ( r.search("abc")) # <_sre.SRE_Match object; span=(0, 3), match='abc'>
r = re.compile("^c") # ^ --> 문장의 시작의미. c글자로 시작되는 문자열
print (r.search("ckw")) # <_sre.SRE_Match object; span=(0, 1), match='c'>
print(r.search("sjc")) # None
r = re.compile("e$") # $ --> 문장의 끝 의미. e글자로 끝나는 문자열
print(r.search("apple")) # <_sre.SRE_Match object; span=(4, 5), match='e'>
print(r.search("banana")) # None
|
그렇다면 기본은 알았으니 조금만 응용해보자.
[0-9] -> 숫자 찾기
[^0-9] -> 숫자가 아닌 것을 찾는다
[\t\n\r\f\v] -> whitespace 문자인 것을 찾는다
[^\t\n\r\f\v] -> whitespace 문자가 아닌 것을 찾는다
[a-zA-Z0-9] -> 문자+숫자인 것을 찾는다. (특수문자 제외, _ 포함)
[^a-zA-Z0-9] -> 문자+숫자가 아닌 것을 찾는다.
외에도 응용하면 다양한 문자열 조작이 가능하다.
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
32
33
34
|
import re
# <_sre.SRE_Match object; span=(4, 9), match='14000'>
start = result.start()
print(start) # 4
end = result.end()
print (end) # 9
aa = re.findall("\d+" , "미카이의 생일은 2222년 12월 12일 입니다.")
print (aa) # ['2222', '12', '12']
for i in aa :
print(i) # 2222, 12, 12
r = re.compile("[a-zA-Z]+")
result = r.finditer("My birthday is 1999 01 11. ")
for i in result :
print (i.group())
print(i.start())
print(i.end())
print(i.span())
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
간단한 이메일 체크하는것을 확인해보자.
1
2
3
4
5
6
|
z = re.compile('^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\.[a-zA-Z.]+$')
if z.search(email):
print('올바르게 입력하였습니다.')
else:
print('이메일 형식에 맞지 않습니다.')
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
전체 코드 : 클릭
'02. Study > Python' 카테고리의 다른 글
클래스&메소드(class&method)_01 (0) | 2022.03.21 |
---|---|
python break, pass, continue 차이점 (0) | 2019.10.15 |
List Comprehension(리스트 컴프리헨션) (0) | 2018.01.12 |
List slicing(리스트 슬라이싱) (0) | 2018.01.12 |
'dict' object has no attribute 'iteritems' 오류 (0) | 2017.05.15 |
Comments