728x90
01. 정규 표현식 기본 문법 실습 2
1. 와일드카드 문자, 줄바꿈 문자의 처리
- .: 줄바꿈을 제외한 하나의 문자와 대응
- *: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응
- .*: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응, 가장 긴 문자열 최대 일치,
줄바꿈을 제외한 모든문자
- .*?: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응, 가장 짧은 문자열 최소 일치
- (?!:).)*: ':'을 제외한 모든 문자
- re.DOTALL, r.S: 소스 문자열에 줄바꿈이 명시되어 있으면 출력 결과도 여러줄에 출력, new line 대응
- re.IGNORECASE, r.I: 대소문자 무시
- re.VERBOSE: 정규 표현식안에 주석을 명시 할 수 있음
* PyDev 에서는 re.DOTALL 인식이 안됨으로 IDLE를 사용 할 것.
- .: 줄바꿈을 제외한 하나의 문자와 대응
- *: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응
- .*: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응, 가장 긴 문자열 최대 일치,
줄바꿈을 제외한 모든문자
- .*?: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응, 가장 짧은 문자열 최소 일치
- (?!:).)*: ':'을 제외한 모든 문자
- re.DOTALL, r.S: 소스 문자열에 줄바꿈이 명시되어 있으면 출력 결과도 여러줄에 출력, new line 대응
- re.IGNORECASE, r.I: 대소문자 무시
- re.VERBOSE: 정규 표현식안에 주석을 명시 할 수 있음
- re.sub('[a-zA-Z]', '', source_text): 영문 대소문자 제거
. re.sub(pattern, repl, string): string에서 pattern과 일치하는 부분에 대하여
repl로 교체하여 결과 문자열을 반환함
. re.sub(pattern, repl, string): string에서 pattern과 일치하는 부분에 대하여
repl로 교체하여 결과 문자열을 반환함
- re.sub('[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]', '', src_text): 특수 문자 제거
* PyDev 에서는 re.DOTALL 인식이 안됨으로 IDLE를 사용 할 것.
[실행 화면]
['cat', 'hat']
cat
hat
--------------------------------------------
<class '_sre.SRE_Match'>
Python
developer
--------------------------------------------
<To serve man> for dinner.>
<To serve man>
--------------------------------------------
Python
Python
데이터분석 분야
크롤링분야
Python
데이터분석 분야
크롤링분야
--------------------------------------------
Python
Python
--------------------------------------------
▷ /reexam/re06.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import re
if __name__ == '__main__':
reg = re.compile(r'.at')
regre = reg.findall('The cat int the hat.')
print(regre) # ['cat', 'hat']
print(regre[0]) # 첫번째 요소 cat
print(regre[1]) # 두번째 요소 hat
print('--------------------------------------------')
reg = re.compile(r'First Name: (.*) Last Name: (.*)')
regre = reg.search('First Name: Python Last Name: developer')
print(type(regre)) # <class '_sre.SRE_Match'>
print(type(regre.group())) # <class 'str'>
print(regre.group()) # First Name: Python Last Name: developer
print(regre.group(0)) # First Name: Python Last Name: developer
print(regre.group(1)) # 첫번째 그룹: Python
print(regre.group(2)) # 두번째 그룹: developer
print('--------------------------------------------')
reg = re.compile(r'<.*>')
regre = reg.search('<To serve man> for dinner>')
print(regre.group()) # <To serve man> for dinner>
regre = reg.search('<To serve man> for dinner.>')
print(regre.group())
reg = re.compile(r'<.*?>') # <To serve man> for dinner.>
regre = reg.search('<To serve man> for dinner.>')
print(regre.group()) # <To serve man>
print('--------------------------------------------')
reg = re.compile(r'.*')
regre = reg.search('Python \n데이터분석 분야 \n크롤링분야')
print(regre.group()) # Python, \n앞에서 짤림
reg = re.compile(r'.*', re.DOTALL)
regre = reg.search('Python \n데이터분석 분야 \n크롤링분야')
print('re.DOTALL: ' + regre.group())
'''
re.DOTALL: Python
데이터분석 분야
크롤링분야
'''
reg = re.compile(r'.*', re.S)
regre = reg.search('Python \n데이터분석 분야 \n크롤링분야')
print('re.S: ' + regre.group())
'''
re.S: Python
데이터분석 분야
크롤링분야
'''
print('--------------------------------------------')
reg = re.compile(r'python', re.IGNORECASE)
regre = reg.search('Python \n데이터분석 분야 \n크롤링분야')
print(regre.group())
reg = re.compile(r'python', re.I)
regre = reg.search('Python \n데이터분석 분야 \n크롤링분야')
print('re.I: ' + regre.group())
print('--------------------------------------------')
-------------------------------------------------------------------------------------
2. 문자열의 대체, 문자열의 일부만 공개하기
- reg = re.compile(r'데이터분석 (\w)\w*')
regre = reg.sub('기계 학습', 'Python은 데이터분석 분야에 데이터 분석'): 원본 문자열의 변환
가**, 나**, 다**
- re.VERBOSE: 정규 표현식에 주석 명시 가능
[실행 화면]
Python은 기계 학습 데이터 분석
--------------------------------------------
**동, **동, **순
가**, 나**, 다**
000-1111-2222
000-1111-2222
000
1111
2222
('000', '1111', '2222')
▷ /reexam/re07.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import re
if __name__ == '__main__':
# 데이터분석 에
# 데이터분석 중요
# 데이터분석 시에
reg = re.compile(r'데이터분석 \w+')
regre = reg.sub('기계 학습', 'Python은 데이터분석 중요 데이터 분석')
print(regre) # Python은 기계 학습 데이터 분석
print('--------------------------------------------')
reg = re.compile(r'개발자 (\w)*') # **동 **동 **순
regre = reg.sub(r'***\1', '개발자 가길동, 개발자 나길동1, 개발자 다길순이하')
print(regre) # ***동, ***1, ***하
reg = re.compile(r'개발자 (\w)\w*') # 가** 나** 다**
regre = reg.sub(r'\1**', '개발자 가길동, 개발자 나길동, 개발자 다길순')
print(regre)
print('--------------------------------------------')
reg = re.compile(r'''
(\d\d\d) # telecom
-
(\d\d\d\d) # number1
-
(\d\d\d\d) # number 2
''', re.VERBOSE)
regre = reg.search('나의 전화번호는 000-1111-2222 입니다.')
print(regre.group()) # 000-1111-2222
print(regre.group(0)) # 000-1111-2222
print(regre.group(1)) # 000
print(regre.group(2)) # 1111
print(regre.group(3)) # 2222
print(regre.groups()) # tuple ('000', '1111', '2222')
-------------------------------------------------------------------------------------
02. Pyclip library의 사용
1. 클립보드의 이용
1. 클립보드의 이용
1) Pyperclip 설치
C:\Users\soldesk8>pip install pyperclip
Collecting pyperclip
Downloading pyperclip-1.5.27.zip
Installing collected packages: pyperclip
Running setup.py install for pyperclip ... done
Successfully installed pyperclip-1.5.27
C:\Users\soldesk8>pip list
pip (9.0.1)
pyperclip (1.5.27)
setuptools (28.8.0)
[실행 화면]
1 단계: clipboard로 복사
3 단계: clipboard의 내용 Editplus로 붙여넣기
가길순 000-1111-2222 mail1@mail.com
나길순 111-1111-2222 mail2@mail.com
다길동 (222)-1111-2222 mail3@mail.com
2 단계: Python 실행<class 'str'>
<class 'list'>
['가길순 000-1111-2222 mail1@mail.com\r', '나길순 111-1111-2222 mail2@mail.com\r', '다길동 (222)-1111-2222 mail3@mail.com']
가길순 000-1111-2222 mail1@mail.com
나길순 111-1111-2222 mail2@mail.com
다길동 (222)-1111-2222 mail3@mail.com
-------------------------------------
여행자 명단입니다.
-------------------------------------
가길순 000-1111-2222 mail1@mail.com
나길순 111-1111-2222 mail2@mail.com
다길동 (222)-1111-2222 mail3@mail.com▷ /reexam/re08.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import pyperclip
if __name__ == '__main__':
# clipboard에서 문자열 가져오기
text = str(pyperclip.paste())
print(type(text))
text2 = text.split("\n")
print(type(text2))
print(text2)
target = ''
for line in text2:
line = line.replace("\r", "")
target += line + "\n"
print(target)
output = '-------------------------------------\n'
output += ' 여행자 명단입니다.\n'
output += '-------------------------------------\n'
output += target;
pyperclip.copy(output)
'''
가길순 000-1111-2222 mail1@mail.com
나길순 111-1111-2222 mail2@mail.com
다길동 (222)-1111-2222 mail3@mail.com
'''
-------------------------------------------------------------------------------------
2. 정규 표현식과 Pyperclip의 연동
1 단계: clipboard로 복사
가길순 000-1111-2222 mail1@mail.com
나길순 111-1111-2222 mail2@mail.com
다길동 (222)-1111-2222 mail3@mail.com
2 단계: Python 실행phoneRegex.findall(text): 3
emailRegex.findall(text): 3
Clipboard로 복사했습니다.
000-1111-2222
111-1111-2222
(222)-1111-2222
mail1@mail.com
mail2@mail.com
mail3@mail.com
3 단계: clipboard의 내용 Editplus로 붙여넣기
000-1111-2222
111-1111-2222
(222)-1111-2222
mail1@mail.com
mail2@mail.com
mail3@mail.com
[실행 화면]
▷ /reexam/re09.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import re, pyperclip
if __name__ == '__main__':
reg = re.compile(r'.') # 하나의 문자가 나타나는 경우
regre = reg.search('ABCDE.')
print(regre.group()) # A
reg = re.compile(r'\.') # .이 나타나는 경우
regre = reg.search('ABCDE.FGHI')
print(regre.group()) # .
# 전화 번호 정규 표현식
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\))? # 000 or (000) 과 0번 또는 1번 나타나는 것과 일치
(\s|-|\.)? # 빈칸, 탭또는 줄바꿈 문자, -, .문자가 나타나는 것과 일치
(\d{4}) # number 1
(\s|-|\.)? # 빈칸, 탭또는 줄바꿈 문자, -, .문자가 나타나는 것과 일치
(\d{4}) # number 2
)''', re.VERBOSE)
# 이메일 정규 표현식, []: 문자 나열
emailRegex = re.compile(r'''(
[a-zA-Z0-9._%+-]+ # 1번 이상 등장
@ # @
[a-zA-Z0-9.-]+ # gmail domain
(\.[a-zA-Z]{2,4}) # .kr, .com 등 .korea X
)''', re.VERBOSE)
# clipboard에서 일치하는 모든 문자열 찾기
src = str(pyperclip.paste())
srclist = src.split("\n")
text = ''
for line in srclist:
line = line.replace("\r", "") # \r: Careage Return 제거
text += line + "\n"
matches = [] # list
print('phoneRegex.findall(text): ' + str(len(phoneRegex.findall(text))))
print(type(phoneRegex.findall(text))) # <class 'list'>
for groups in phoneRegex.findall(text): # 전화번호 검색
# mail1@mail.com
phoneNum = '*'.join([groups[1], groups[3], groups[5]])
matches.append(phoneNum)
'''
000*1111*2222
111*1111*2222
(222)*1111*2222
'''
print('emailRegex.findall(text): ' + str(len(emailRegex.findall(text))))
for groups in emailRegex.findall(text):
matches.append(groups[0]) # mail1@mail.com
# clipboard로 붙이기
if len(matches) > 0:
pyperclip.copy('\n'.join(matches))
print('Clipboard로 복사했습니다.')
print('\n'.join(matches)) # 라인 변경 추가
else:
print('전화번호나 이메일 주소가 없습니다.')
'''
가길순 000-1111-2222 mail1@mail.com
나길순 111-1111-2222 mail2@mail.com
다길동 (222)-1111-2222 mail3@mail.com
'''
-------------------------------------------------------------------------------------
04. cx_freeze로 EXE 만들기
2. install
pip install cx_freeze
3. script 생성
▷ /reexam/Setup.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import sys
from cx_Freeze import setup, Executable
setup(name = "Pyperclip",
version = "1.0",
description = "Pyperclip phone email filter",
author = "dev",
executables = [Executable("re09.py")])
# executables = [Executable("re09.py", base="Win32GUI")])
-------------------------------------------------------------------------------------
4. 실행
setup.py build
build/exe.win-amd64-3.6/re09.exe 실행
728x90
'빅데이터 프로그래밍 > Python' 카테고리의 다른 글
[Python] 26. [Scraping] 재귀 호출 함수, Lamda 함수 이용 , random 난수 발생, LX (0) | 2017.08.05 |
---|---|
[Python] 25. Google Gmail SMTP 서버를 이용한 Mail 전송 (2) | 2017.08.05 |
[Python] 23. Regular Expression(정규 표현식) 기본 문법 실습 1 (0) | 2017.08.05 |
[Python] 22. [DBMS] Sqlite3 + Python 연동 실습, 140자 일기장 만들기 (0) | 2017.08.05 |
[Python] 21. [DBMS] Sqlite3 + Python 연동 실습 (0) | 2017.08.05 |
댓글