2022.05.16 - [Python] - [Python]정규표현식 라이브러리 사용법과 예제
정규표현식이란?
특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식
자주 쓰이는 표현
- 숫자를 찾음: [0-9]
- 숫자가 아닌것을 찾음: [^0-9]
- white space 문자를 찾음: [\t\n\r\f\v]
- white space 아닌 문자를 찾음: [^\t\n\r\f\v]
- 문자, 숫자를 찾음: [0-9a-zA-Z]
- 문자, 숫자 아닌것을 찾음: [^0-9a-zA-Z]
- 한글을 찾음: [가-힣]
- 한글 아니 것을 찾음: [^가-힣]
Dot(.)
- Dot \. 메타 문자는 줄바꿈 문자인 \n를 제외한 모든 문자(한 개)를 의미함
- 예: D.A 는 D + 모든 문자(한 개) + A 를 의미
- DAA, DvA, D1A, D*A
- 정말 Dot(.)이 들어간 패턴을 찾으려면?
- \. 으로 표시하거나, [.] 으로 표시
- pattern = re.compile('D\.A')
- pattern = re.compile('D[.]A')
찾아 바꾸기
특정 패턴이 매칭되는 것을 찾아서, 다른 문자열로 바꾸기
- re.sub(패턴, 바꿀데이터, 원본데이터)
string = "DDA D1A DDA DA DBA"
re.sub('D.A', 'Dave', string) # 문자, 숫자가 아닌 데이터를 찾아서, '' 로 대체해라(삭제해라)
>>>
'Dave Dave Dave DA Dave'
반복되는 패턴 1 - ?, *, +
- ? 는 앞 문자가 0번 또는 1번 표시되는 패턴 (없어도 되고, 한번 있어도 되는 패턴)
- Dot(.)은 쓰이는 곳(앞,뒤)에 문자가 있는지 없는지가 중요
- ? 는 쓰이는 곳 앞 문자로 판단
- * 는 앞 문자가 0번 또는 그 이상 반복되는 패턴
- + 는 앞 문자가 1번 또는 그 이상 반복되는 패턴
# ? 는 앞 문자가 0 or 1 번 반복되는 패턴
pattern2 = re.compile('d?t')
res1 = pattern2.search("date")
res2 = pattern2.search("ddddddtte")
print(res1)
print(res2)
# * 는 앞 문자가 0 or 그 이상 반복되는 패턴
pattern3 = re.compile('d*t')
res3 = pattern3.search("date")
res4 = pattern3.search("ddddddtte")
print(res3)
print(res4)
# + 는 앞 문자가 1번 또는 그 이상 반복되는 패턴
pattern4 = re.compile('d+t')
res5 = pattern4.search("date")
res6 = pattern4.search("ddddddtte")
print(res5)
print(res6)
>>>
<re.Match object; span=(2, 3), match='t'>
<re.Match object; span=(5, 7), match='dt'>
<re.Match object; span=(2, 3), match='t'>
<re.Match object; span=(0, 7), match='ddddddt'>
None
<re.Match object; span=(0, 7), match='ddddddt'>
반복되는 패턴 2 - {n}, {m,n}
- {n} : 앞 문자가 n 번 반복되는 패턴
- {m, n} : 앞 문자가 m 번 반복되는 패턴부터 n 번 반복되는 패턴까지
- {m,n} 은 붙여 써야 함 {m, n} 으로 쓰면 안됨
## {n} : 앞 문자가 n 번 반복되는 패턴
pattern5 = re.compile('AE{3}A')
res7 = pattern5.search("AEEA")
res8 = pattern5.search("AEEEA")
res9 = pattern5.search("AEEEEA")
print(res7)
print(res8)
print(res9)
## {m, n} : 앞 문자가 m 번 반복되는 패턴부터 n 번 반복되는 패턴까지
pattern6 = re.compile('AE{3,5}A')
res10 = pattern6.search("AEEA")
res11 = pattern6.search("AEEEA")
res12 = pattern6.search("AEEEEA")
res13 = pattern6.search("AEEEEEA")
print(res10)
print(res11)
print(res12)
print(res13)
>>>
None
<re.Match object; span=(0, 5), match='AEEEA'>
None
None
<re.Match object; span=(0, 5), match='AEEEA'>
<re.Match object; span=(0, 6), match='AEEEEA'>
<re.Match object; span=(0, 7), match='AEEEEEA'>
괄호 안에 들어가는 문자가 들어 있는 패턴 - [문자]
- 예: [abc] 는 a, b, c 중 하나가 들어 있는 패턴을 말함
- 하이픈(-)을 이용하면 알파벳 전체를 나타낼 수 있음
- [a-z], [A-Z],[0-9]
- 대소문자 전체 : [a-zA-Z]
- 대소문자+숫자전체 : [a-zA-Z0-9]
- 한글 : [가-힣]
- 한글이 아닌 것 : [^가-힣]
- ^ 을 쓰면 그 뒤에 오는 문자가 아닌 패턴을 찾음
- 문자를 결국 알파벳, 숫자, 특수문자, whitespace(스페이스, 탭, 엔터등) 로 분류할 수 있으므로
- 알파벳, 숫자, 특수문자 : [^ \t\n\r\f\v] 는 이중에서 whitespace 가 아닌 알파벳, 숫자, 특수문자를 지칭함
## 괄호 안에 들어가는 문자가 들어 있는 패턴 - [문자] pattern7 = re.compile('[a-zA-Z]+') pattern8 = re.compile('[a-zA-Z0-9]+') pattern9 = re.compile('[가-힣]+') pattern10 = re.compile('[^가-힣]+') res14 = pattern7.search("가나abCD34") res15 = pattern8.search("가나abCD34") res16 = pattern9.search("가나abCD34") res17 = pattern10.search("가나abCD34") print(res14) print(res15) print(res16) print(res17) >>> <re.Match object; span=(2, 6), match='abCD'> <re.Match object; span=(2, 8), match='abCD34'> <re.Match object; span=(0, 2), match='가나'> <re.Match object; span=(2, 8), match='abCD34'>
https://www.inflearn.com/course/python-crawling-basic#
'Python > Basic' 카테고리의 다른 글
[Python]Database 연결하기 - Sqlite3, Mysql, Mariadb (0) | 2022.06.27 |
---|---|
[Python]정규표현식 라이브러리 사용법과 예제 (0) | 2022.05.16 |
[Python]문자열 함수 정리 (0) | 2022.05.14 |