정규표현식: 복잡한 문자열을 처리할때 사용하는 기법
# 정규표현식: 비사용 방식
data = """
park 800904-1234567
kim 841204-1034562
"""
result = []
for line in data.split('\n'):
word_result = []
for word in line.split():
if len(word) == 14 and word[:6].isdigit() and word[7:].isdigit():
# isdigit() # 숫자 여부 체크
word = word[:6] + '-' + '*******'
word_result.append(word)
result.append(''.join(word_result)) # 이름, 주민번호를 다시 공백으로 묶음
print('\n'.join(result))
> 정규 표현식을 사용하기 전
개행문자를 기준으로 문자열을 끊어주고 -> 공백 기준으로 글자를 다시 끊어준 후 ->글자 개수가 14개인지, 앞에 6글자와 뒤에 7글자가 숫자인지 검사 -> 뒷자리 7글자를 '*' 문자로 변경 후 ' '.join()을 통해 다시 묶는다.
# 정규 표현식: 사용 방식
import re
data = """
park 800904-1234567
kim 841204-1034562
"""
pat = re.compile('(\d{6})[-]\d{7}')
print(pat.sub(r'\1-*******',data).strip())
# park 800904-*******
# kim 841204-*******
# 그룹핑 활용
정규표현식 사용 : import re(Regular Expressiond의 줄임말) 올린 후 -> 해당하는 패턴을 re.compile() 함수를 이용해 만들어주고 -> 변수이름.sub(바꿀 문자열, 대상 문자열,바꿀횟수)를 통해 뒤에 그룹 2번을 변경한다.
메타문자: 정규 표현식에 사용되어 지는 특별한 의미를 갖는 문자
1. [] : 문자들 중 하나와 매치되는지(1개라도 매치가 되면 됨)
- 문자 클래스 안에 ^ 메타문자 사용은 not의 의미
- 문자 클래스 밖에 사용은 특정 문자로 시작하는지 판단
[abc] | 'a' / 'before' / 'dude' | Yes/ Yes/ No |
2. 자주 사용하는 문자클래스
- \ : 문자 그대로 표현하려면 앞에 붙임 (예: \*)
- \d: = 숫자와 매치 [0-9] <-> \D = 숫자가 아닌 것과 매치
- \s: = 공백문자와 매치 [ \t \n \r \f \v ] <-> \S = 공백문자가 아닌 것과 매치
- \w: = 문자+숫자와 매치[0-9a-zA-Z] <-> \W = 문자+숫자가 아닌 것과 매치
3. Dot(.)
줄바꿈 문자인 \n 을 제외하고 모든 문자와 매치
[ . ] 을 사용하면 문자 원래 의미인 마침표가 됨
a.b | aab / a0b / abc | Yes / Yes/ No |
4. 반복(*)
* 바로 앞에 문자가 0부터 무한대로 반복
5.반복(+)
+는 최소 1번 이상 반복될 때 사용
6. 반복횟수 지정{m,n}
{m,n} m부터 n까지 매치 가능하다. {m,} : m 이상/ {,n}: n이하/ {n} n번 반복
7. ?
? 앞에 문자가 하나 있거나 없을때 매치
8. $
$ 앞에 있는 문자로 끝나면 매치
print(re.search('short$','Life is too short'))
print(re.search('short$','Life is too short,you need python'))
# <re.Match object; span=(12, 17), match='short'>
# None
9. ^
^ 다음에 있는 문자로 시작하면 매치
10. |
or의 의미로 사용
import re
p = re.compile('Crow|Servo')
m = p.match('ServoHello')
print(m)
# <re.Match object; span=(0, 5), match='Servo'>
'국비 교육 > 데이터' 카테고리의 다른 글
[데이터 수집] 정규 표현식(Regular Expression) -3 (0) | 2023.10.31 |
---|---|
[데이터 수집] 정규 표현식(Regular Expression) -2 (0) | 2023.10.31 |
[데이터 수집] Web 구성요소 (0) | 2023.10.30 |
[데이터 수집] 웹 스크래핑 -1 (0) | 2023.10.30 |