[Python] 24. Regular Expression(정규 표현식) 기본 문법 실습 2, Pyperclip library, cx_freeze로 EXE 만들기

2017. 8. 5. 00:22·빅데이터 프로그래밍/Python
728x90
반응형
01. 정규 표현식 기본 문법 실습 2
 
1. 와일드카드 문자, 줄바꿈 문자의 처리
- .: 줄바꿈을 제외한 하나의 문자와 대응
- *: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응
- .*: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응, 가장 긴 문자열 최대 일치,
     줄바꿈을 제외한 모든문자
- .*?: 모든 문자와 대응, 앞에 나오는 문자가 없거나 한번 이상 대응, 가장 짧은 문자열 최소 일치
- (?!:).)*: ':'을 제외한 모든 문자
- 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('[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]', '', 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) 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로 복사
가길순 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
 
3 단계: clipboard의 내용 Editplus로 붙여넣기
-------------------------------------
        여행자 명단입니다.
-------------------------------------
가길순 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 만들기
 
1. http://cx-freeze.sourceforge.net
 
 
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
'빅데이터 프로그래밍/Python' 카테고리의 다른 글
  • [Python] 26. [Scraping] 재귀 호출 함수, Lamda 함수 이용 , random 난수 발생, LX
  • [Python] 25. Google Gmail SMTP 서버를 이용한 Mail 전송
  • [Python] 23. Regular Expression(정규 표현식) 기본 문법 실습 1
  • [Python] 22. [DBMS] Sqlite3 + Python 연동 실습, 140자 일기장 만들기
밍글링글링
밍글링글링
mingling - 밍글링, 밍글밍글링. 코드와 어우러지다. IT/ 프로그래밍/소스
    반응형
    250x250
  • 밍글링글링
    mingling
    밍글링글링
  • 전체
    오늘
    어제
    • 밍글링글링 (407) N
      • Flutter (2)
      • 일상생활 (8)
        • 리뷰 (1)
        • 생활정보 (4)
        • 맛집 (0)
        • 여행 (0)
        • 모든정보 (3)
      • JAVA (126)
        • 개념 (6)
        • 예제 (115)
        • Exception (2)
      • C (1)
        • C (1)
        • C++ (0)
        • C# (0)
      • JS (29)
        • JavaScript (18)
        • JQuery (5)
        • AJax (0)
        • NODE.JS (6)
        • Angular.JS 2.0 (0)
      • WEB (87)
        • HTML (6)
        • CSS (61)
        • JSP (20)
        • JSTL (0)
      • FrameWork (8)
        • Spring (8)
        • BootStrap (0)
        • MyBATIS (0)
        • JUnit (0)
      • 외부 라이브러리 (5)
      • 공유 소스 관리 (5)
        • Git (5)
        • SVN (0)
      • 빅데이터 프로그래밍 (37)
        • Python (37)
        • R Programming (0)
      • DB (7)
        • ORACLE (0)
        • MySql (6)
      • Development Tools (7)
        • StarUML (0)
        • eXERD (0)
        • Eclipse (4)
      • SKILL (6)
        • Migration (0)
        • Security (6)
      • MicroSoft (0)
        • Excel (0)
        • Word (0)
      • Android (0)
      • Server (21)
        • Ubuntu (5)
        • Linux (15)
      • IOS (0)
      • XML (0)
      • 미디어 (0)
      • 공지사항 (3)
      • NETWORK (1)
      • 게임 (4)
        • 피파 (1)
        • 리니지M (0)
        • 배틀그라운드 (1)
        • 듀랑고 (2)
      • 세상 이슈 (6)
      • 일렉트론 (0)
      • 대회 소식 (4)
      • 업무 (2)
      • Express, Vue (6)
      • docker (11)
      • svelte (3)
      • 블록체인 (1)
      • IT (10) N
      • Rust (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리 자동화
    프런트엔드
    jsp parameter
    자바 클래스
    Rust lang
    React Compiler
    nginx ssl 적용
    AI 코딩 에이전트
    러스트
    css block
    ssl 인증서 발급
    자바 for문
    docker
    리눅스 설치
    proxy pass
    css tb
    nginx
    API 설계
    spring java
    자바 객체 지향
    css table
    rust linux
    servlet class
    gitlab 설치
    Extension Bisect
    Java Array
    자바 exception
    ubuntu
    lang rust
    VS Code 팁
    자바 배열
    css float
    오류
    css list
    SSL 인증서
    vue 설치
    에디터 팁
    mysql db
    vscode
    java casting
    Node
    svelte
    자바 생성자
    클론코딩
    jsp include
    브라우저 자동화
    vue cli
    css transition
    css perspective
    nginx ssl 설정
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
밍글링글링
[Python] 24. Regular Expression(정규 표현식) 기본 문법 실습 2, Pyperclip library, cx_freeze로 EXE 만들기
상단으로

티스토리툴바