데이터 분석 텍스트 마이닝 정규표현식 python [2편]
데이터 분석 텍스트 마이닝 정규표현식 2편 함수
- match()
- 문자열 처음부터 정규식의 매칭 조사
p = re.compile('[0-9]+') res = p.match('abcd1415')
시작부터 정규식에 매칭되지 않았기에 None
2. search()
- 문자열의 전체와 정규식의 매칭 조사
-
res = p.search( 'abcd5 5skdn 1234 sdfjw434' ) print(res)
5
3. findall()
- 정규식에 매칭되는 모든 문자열을 list로 리턴
p = re.compile('[a-z]+')
res = p.findall( 'abcd5 5obnd 1234 sdfjw434 12abc34 ad12fh' )
if res: print( res )
문자열에서 소문자로만 이어진 문자열을 다 찾아서 리스트로 리턴한다
['abcd', 'obnd', 'sdfjw', 'abc', 'ad', 'fh']
4. finditer()
- 정규식에 매칭되는 모든 문자열을 iterator 리턴
res = p.finditer( 'abcd5 5obnd 1234 sdfjw434 12abc34 ad12fh' )
for w in res:
print( w, w.group(), w.start(), w.end(), w.span() )
검색된 부분이 문자열내에 어떤 위치에 있는지도 리턴한다
ex) <re.Match object; spang=(0,4), match='abcd'> abcd 0 4 (0, 4)
5. sub()
- 정규식에 매칭되는 부분을 특정 문자열로 대체
p = re.compile('(red|blue|white)')
p.sub('컬러', '내가 좋아하는 색은 red, 너가 좋아하는건 blue, white는 모두가')
정규식에 매칭되는 부분을 컬러 문자열로 대체한다
'내가 좋아하는 색은 컬러, 너가 좋아하는건 컬러, 컬러는 모두가'
6. group()
- 데이터를 그룹화하여 추출 가능
text = 'SKT 010-1234-5678 홍길동'
p = re.compile(r'(\w+)\s+((\d+)[-](\d+)[-](\d+))\s+(\w+)')
m = p.search(text)
for n in m.groups():
print( n )
SKT
010-1234-5678
010
1234
5678
홍길동
7. compile()
7-1 DOTALL, S
p = re.compile( 'a.b', re.DOTALL )
print( p.match('a|b') )
print( p.match('a\nb') )
첫번째는 원래 출력되는 코드이며 두번째는 DOTALL이 없을때는 줄바꿈으로 None이 출력되지만 DOTALL을 통해 줄바꿈도 처리된다
re.DOTALL 은 re.S로 작성해도 된다
7-2 IGNOGRECASE, I
- 대소문자 구분없이 매칭
p = re.compile( '[a-z]', re.I )
print( p.match('python').group() )
print( p.match('Python').group() )
p, P 가 출력되며 대소문자 구분없이 매칭된다
7-3 MULTILINE, M
- 여러 문장을 탐색하면서 매칭
7-4 VERBOSE, X
- 복잡한 정규식을 설명할때 사용
p = re.compile( r''' ( # 그룹핑 시작
0[0-7]+ # 8진수 |
[0-9]+ # 10진수 |
x[0-9a-fA-F]+ # 16진수
) # 그룹핑 끝 ; # 문자1개 ''', re.X)
8. 전방탐색
text = 'https://m.naver.com'
p = re.compile('.+:')
m = p.search( text )
if m:
print( m.group() )
https: 예시처럼 url을 취득할때 사용할 수 있다
8-1. 긍정형 전방탐색
text = 'https://m.naver.com'
p = re.compile('.+:')
m = p.search( text )
if m:
print( m.group() )
긍정형 전방탐색으로 예시와 같이 정규식에 해당하는 값을 받아올때 사용한다
8-2 부정형 전방탐색
p = re.compile('.*[.](?!py$|msi$).*$')
위 코드는 부정형 전방탐색의 예시로 파일들 중에서 확장자가 py, msi로 끝나는 파일을 제외한다 처럼 파일 확장자 제외와 같은 상황에 사용한다
9. 주민번호 필터링
p = re.compile( '(\d{6})[-]\d{7,7}' )
data = ''' A 741007-1234567 B 020115-3234567 '''
print( p.sub( '\g<1>-*******', data) )
----
p = re.compile( '(\d{6})[-](\d)\d{6}' )
print( p.sub( '\g<1>-\g<2>******', data) )
첫번째 print는 뒷자리 모두 *표시로 처리하는 코드이고
두번째 print는 뒷자리 첫번째숫자만 표시되도록 만든 코드이다
data라는 텍스트에 컴파일 형식에 따라 출력하는 방식을 설정하는 방식이다