블로그 이미지
자유로운설탕

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Notice

2017. 3. 4. 12:57 프로그래밍

  8교시는 정규 표현식이 무언지를 알아보고, 파이썬에서 사용하는 샘플을 시연하려 한다.

 

 

[목차]

0. 왜 파이썬 공부에 구글을 이용하는게 좋은가?

1. 언어를 바라보는 방법. 파이썬을 어떻게 바라봐야 할까?

2. 파이썬 설치와 환경, 버전 선택 하기의 이유.

3. 만들고자 하는 기능을 모르는 조각으로 나눠 조사해 보기

4. 데이터 베이스에서 내용 가져와 출력하기

5. 암호화 모듈을 이용해 암복호화 해보기

6. 퍼즐 조각들을 합쳐보기

7. 엑셀 파일 사용해 보기 -> 부록 : fuction 을 이용해서, 코드 정리해 보기

8. 정규표현식을 왜 사용해야 할까? 언어속의 미니 언어 정규표현식 살펴보기

9. 입력과 결과를 GUI 화면과 연결해 보기

10. Whois API 이용해 보기

11. 웹페이지 호출해 내용 파싱 하기(BeautifulSoup 그리고 한계)

12. 자동화 - 웹 자동화(with Selenium)

13. 자동화 - 윈도우즈 GUI 자동화(with pywinauto)

14. 자동화 - 작업 자동화

15. 수학 라이브러리 살펴보기

16. 그래픽 라이브러리 살펴보기

17. 머신러닝에서의 파이썬의 역활

18. 웹 프로그래밍 - Legacy Web

19. 웹 프로그래밍 - Flask 살펴보기(feat. d3.js)

20. 웹 프로그래밍 - Django 살펴보기

21. 정리 - 이런저런 이야기

 

 

 

[들어가면서] 

  정규 표현식이란 건 처음 보게 되면 정말 이상한 기호로 이루어진 암호문 같은 언어라는 생각이 든다. '.',  '*',  '[', '-' 등의 보통 프로그램에서는 구조용 기호로만 쓰일 여러가지 문자로 이루어진 문법을 사용하는데, 웬만한 프로그래밍 책에서는 또 한번씩은 슬쩍 다루기도 한다. 이메일이나 전화번호 같은 형태를 검출 하는데 사용한다고 얘기는 들었지만, 당장 프로그래밍 언어도 배우기 힘들어 죽겠는데 이걸 정말 어디다 쓰나 싶다. 또 이메일 검출이 필요하다면 구글에서 관련 샘플을 가져다 쓰면 되지 않나도 싶다. 그래서 아마 한번 쯤 훝어보고 이렇구나 하고 넘어가는 경우가 많을 것 같다. 이 시간을 통해서 어떤 경우 정규 표현식이 유용하게 쓸 수 있을까 하는 부분에 대해 조금이라도 전달이 되고, 나중에 따로 시간을 내서 찬찬히 공부를 해보는 것도 괜찮겠구나 생각이 드는 계기가 된다면 더 바랄 것은 없을 듯하다.

 

  언어나 툴들 사이의 정규 표현식의 사용법 및 기능 차이가 있다. 예를 들면 언어인 perl, python, java 뿐만 아니라, 내용, 파일이름 검색에서 정규 표현식을 지원하는 울트라에디터, Total commander 같은 유틸리티 들도 약간의 사용 차이를 가지고 있다.  아래의 예를 보면 울트라에디터라는 편집기에서 perl, unix, 울트라 에디터 방식의 3가지 정규 표현식 스타일(문법)을 내용 검색을 지원 한다는 것이다.

 

  개인적으로 느끼기에 언어별 이런 정규 표현식 문법 표시 및 사용 스타일의 차이는 어느 언어든간에 해당 언어를 만든 사람이 이렇게 사용하면 편하겠다고 생각해서 디자인한 걸테고, 기본적인 틀은 사실 많이 벗어나지 않는다. 예를 들면 앞에서 얘기했던 관계형 데이터 베이스인, 오라클, Mysql, MSSQL 이 SQL의 기본베이스만 잘 이해하고 있다면 확장된 차이점만 공부하면 되는 것과 마찬가지로(물론 언어별로 깊이 들어가면 디테일한게 있다고 얘기하심 반박하긴 힘들다), 언어들의 사용법들의 세세한 차이보다 중요한건, SQL 의 여러 공통된 요소들에 대한 깊고 정확한 이해라고 본다. 어느 하나라도 기본 베이스가 되면 사실 스타일만 적용하면 된다고 보면 된다.(다만 예외인 것은 SQL 도 마찬가지지만, 사용자의 편의성을 위해서 기본 기능을 확장한 부분들은 각 언어별로 장 단점이 있으리라고 본다)

 

  정규 표현식도 SQL 과 마찬가지로 기본 베이스가 중요하다. 정규식의 기본 뼈대를 구성하는 요소들만 찬찬히 잘 이해하고, 정규 표현식으로 할수 있는 일과 할 수 없는 일을 정확하게 인식만 할수 있다면, 문법을 굳이 암기 하지 못한다고 하더라도(개인적으로는 매번 정규 표현식이 필요할때 마다 다시 가물가물해서 메뉴얼을 찾아 보곤 한다 --;) 그 부분은 구글이나 해당 언어의 정규표현식 메뉴얼을 찾아가면서 필요한 기능을 만들면 된다. 그리고 다시 한번 강조 하고 싶은 부분 중 하나는 정규 표현식 역시 파이썬에서 자주 사용은 하겠지만, 파이썬의 본질적 문법과는 그닥 상관없는 프로그래밍의 외적 요소 중 하나라는 것이다. 다만 익혀 두면 텍스트 원본에서 의미 있는 데이터를 찾아내는 파싱(parsing) 이라는 측면에서 정규식을 모르는 사람과는 조금은 차이가 난다고 생각하여 이렇게 따로 한 챕터를 분리해서 맛보기로 보여주려고 한다.

 

 

  그럼 정규 표현식은 어떨때 많이 유용할까? 텍스트 형태라고 했으니 html 을 파싱 할때, xml 을 파싱 할때, json 을 파싱 할때? 일단 기본적으로 텍스트 형식의 데이터는 모두 적용 가능하지만, 사실 json, xml 같은 많이 쓰이는 정형화된 텍스트 형태의 데이터 들은 이미 정규 표현식 보다 효율적으로 내부에 담겨진 데이터 위치를 쉽게 찾아, 접근 할수 있는 모듈들이 많이 만들어져 있다. 개인적으로 이런데에 정규 표현식을 쓰는건 계륵이라고 생각한다(전동 드라이버가 집에 있는데, 드라이버를 넣을 공간이 안되 힘들다 거나 하는 특별한 이유도 없이 굳이 일반 드라이버를 수동으로 열심히 돌리는 것과 같다고 본다). html, xml 의 구조 파싱의 경우 beautiful soup 이라는 레퍼런스가 풍부한 좋은 모듈이 있는듯 하고, json 은  파이썬에 내장된 모듈이 있다. json 은 뒤의 api 쓰는데서 사용할 예정이고, beautiful soup 도 개인적으로도 궁금해 한 챕터를 추가할까 싶다. (이미 구글에서 소스보기, 크롤링 관련해서 관련해서 잘 설명해 놓은 글들이 많은 것 같긴 하지만...). 그래서 사실 정규 표현식은 적당히 비 공식적인 포맷에 잘 어울린다. telnet 으로 연결한 터미널의 출력 결과 라든지, 로그파일 이라든지, 메신저 프로그램 등의 텍스트 형태의 내보내기(export) 파일 이라든지 말이다. 여튼 적절하게 정형화된 텍스트 형태의 데이터를 대상으로 가장 적합한 사용을 할수 있다고 개인적으로 생각한다.

 

 

[추천하는 공부방법]

  그리고 공부하기 위해서 관련 책을 선택할 때는 조금 헷깔려 할 것 같은 부분이 있다. 정규 표현식 책은 보통 2가지 스타일이 있다고 보는데, 하나는 언어별로 비교해 다루면서 설명하는 책과, 다른 하나는 하나의 언어만 선택해서 설명에 들어가는 책이 있는 듯 한다. 전자는 내가 쓰는 언어를 사용해 샘플을 만들어 시연해 볼수 있는 가능성이 크지만, 너무 여러가지 언어의 차이점을 다루느라 내용 전달에 초점이 안 맞춰질 수 있고, 반대로 후자는 한 가지 언어만을 다루면서 너무 일반적인 내용을 다루거나, 반대로 너무 깊이 들어가 난이도가 어려워 져서 처음 보는 입장에서는 힘들 수 있다. 예전에 봤던 책 중에 추천할 만한 책은(이해 관계는 전혀 없다 --;) "손에 잡히는 정규 표현식" 이라는 책과, 요즘 나온 책 중에서는 괜찮아 보이고 평도 괜찮은 책은 "다양한 언어로 배우는 정규표현식" 이다. 두 번째 책은 정규 표현식의 구조 까지 언급해 들어가는 게 좀 걸리긴 하지만, 한국어 책만 보고 싶다면 위의 두 책을 순서대로 보거나, 앞 책을 우선 보고 다음 책을 계속 볼지 고려해 보는 것도 어떨까 싶다. 앞 책은 개인적으로 평가했을 때, 초보자가 보기에도 확실히 잘 구성되 있다. 

 

  개인적으로 정규 표현식을 공부하는 방법은 일단 너무 어렵지 않은 위에 언급한 것과 비슷한 책을 한권 찬찬히 읽어 전체적인 흐름을 파악한후, 자기가 공부 하고 싶은 언어의 정규 표현식 사용법을 살펴 보는거다. 이후 좀더 전문적으로 속 내용 까지 보고 싶으면 mastering regular expressions 같은 책을 찬찬히 보심 될 듯하다.(얘 쫌 두껍긴 하다)

 

 

  마지막으로 실습을 해볼때는 3가지 방법이 있을 듯 한데, 1) 정규 표현식을 테스트 할수 있는 유틸리티 프로그램으로 실습하는 것, 2) 정규 표현식을 테스트 할 수 있는 웹 사이트를 이용하는 것, 3) 파이썬을 그대로 이용해 실행 해보는 것 이다. 파이썬을 바로 실행하면서 이것저것 공부해 보는 것도 나쁘진 않아 보이는데, 파이썬에 익숙하지 않다고 생각하는 사람은 1), 2) 번이 정규 표현식 자체의 공부에만 집중 할 수 있어 좋다.

 

  유틸리티 프로그램 사용 방식은 아래의 툴을 다운 받으면 소스가 .net 기반인 거 보니 .net 형식의 정규식 일거 같긴 하지만, 처음 공부할 레벨의 기본 정규식은 거의 호환이 될 것이다.

https://sourceforge.net/projects/regulator/

 

  사용 방법은 프로그램을 다운받아 압축을 풀고 Regulator.exe 을 실행 시킨다. 텍스트 편집기에 테스트할 내용을 아래와 같이 적은 후 c:\python\code 폴더에  reg.txt 로 저장한다.

1
2
<hi> test
  me <hello>
cs

 

  이후 아래의 프로그램 메뉴에서,  

   1) 내용 파일을 선택 해서 저장한 reg.txt 를 불러오면 해당 내용이 Input 창 내에 보인다.

   2) 이후 문서창에 우리가 원하는 정규 표현식을 넣는다. 여기서 넣은 내용은 "^<.*>" 

   3) 상단의 'Match' 버튼을 클릭 한다.

   4) 정규 표현식과 매치된 결과들이 나온다.

  입력된 정규 표현식(^<.*>)을 해석 하면 "행의 처음 시작(^)이 '<' 문자이고, 그 뒤에 어떤 글자든(.) 0개 이상 나오고(*) 다시 '>' 로 끝나는 단어들을 찾아줘" 이다. 그래서 1번째 행의 <hi> 는 '<'가 행의 처음 시작이기 때문에 선택되고, 2번째 행의 <hello> 는 행의 내용 중간에 '<' 가 시작되서 선택이 안되었다. 위쪽의 정규 표현식에서 '^' 기호만 빼고 다시 'Match' 버튼을 누르면, 이제는 '행의 시작'이라는 조건이 사라졌기 때문에 <hi>, <hello> 모두 선택 되니 해보길 바란다. 

 

 

 

  두 번째는 제가 한참 공부할땐 생각 못했던 웹 페이지에서 쓰는 방식이다. 구글에서 'regular expression tool' 이라고 찾음 맨 처음에 나오는, https://regex101.com/ 페이지 이다. 사용법은 거의 비슷하다. 첫 번째로 왼쪽에서 FLAVOR 섹션에서 'python' 을 선택한다. 그럼 이제 부터 적용하는 모든 정규 표현식은 파이썬 스타일로 적용된다.

 

  그 후 밑의 그림에 있는데로 TEST STRING 안에 아까 텍스트 파일로 저장했던 내용을 복사해 넣고, REGULAR EXPRESSION 안에 우리가 넣었었던 ^<.*> 식을 넣으면, 실시간으로 왼쪽 밑의 MATCH INFOMATION 쪽에 매칭된 내용이 나온다. 파이썬으로 정규 표현식을 만들 필요가 있을때는 이런 웹페이지에서 원하는 패턴의 텍스트와, 정규 표현식을 충분히 테스트 하고, 테스트가 완료되면 파이썬 코드에 살포시 집어 넣어주면 버그도 없고 좋을 듯 하다.

 

 

 

 

[파이썬으로 정규 표현식 실행해 보기]

  ㅎㅎ 사실 이 시간은 언어속의 부록 언어같은 정규 표현식에 대해서 얘기하는 시간 이였어서, 위의 도입 부분에서 이미 할 모든 얘기를 다 한듯 싶기도 하다 --; 그럼 이제 부턴 맘 편하게 파이썬에서 어떻게 정규 표현식이 사용 되는지 간단한 샘플과 함께 시연을 하고 마치려 한다. 우선 파이썬에서 정규 표현식이 어떻게 쓰이는지 알고 싶다면 구글에서 'python regular expression' 이라고 검색한다.  그럼 맨위에 바로 파이썬 공식 페이지의 문서가 있다.

https://docs.python.org/2/library/re.html

 

 

  본인이 정규 표현식만 다른 언어에서 잘 경험해 보았다면, 해당 페이지를 슬슬 훝어보면 다른 언어와의 차이를 빨리 캐치하고, 바로 사용에 들어갈 수도 있을 것이다.  그럼 파일을 읽어와서 파일안에서 특정 정규 표현식과 일치하는 단어들을 찾는 예제를 만들어 보려 한다. 위의 파이썬 예제 페이지의 샘플은 그다지 바로 쓰기엔 직관적이지 못한듯 해서, 구글에다 'python regular expression file' 라고 검색한다. 가장 상단의 스택오버플로우 글을 본다

http://stackoverflow.com/questions/10477294/how-do-i-search-for-a-pattern-within-a-text-file-using-python-combining-regex

 

  제일 위에 있는 아래 샘플이 맘에 든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#-*- coding: utf-8 -*-
# regular expression 모듈 임포트
import re
 
# 정규 표현식 패턴 등록
pattern = re.compile("<(\d{4,5})>")
 
# test.txt 파일을 한줄 한줄 가져와서(enumerate) 루프를 돌리면서
for i, line in enumerate(open('test.txt')):
# 해당 줄에서 원하는 패턴을 모두 찾아 한건 한 건 꺼내어서
    for match in re.finditer(pattern, line):
# 몇 번째 라인에서, 어떤 값을 찾았는지 모두(group()) 보여준다.
        print 'Found on line %s: %s' % (i+1, match.groups())
cs

 

 

  그럼 위의 샘플을 적당히 변경해서, 우리가 아까 만든 reg.txt 에 대한 정규 표현식 예제를 만들어 본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#-*- coding: utf-8 -*-
# regular expression 모듈 임포트
import re
 
# 정규 표현식 패턴 등록(처음 시작이 < 이고 > 로 닫히는 단어)
pattern = re.compile("^<.*>")
 
# reg.txt 파일을 한줄 한줄 가져와서(enumerate) 루프를 돌리면서
for i, line in enumerate(open('reg.txt')):
# 해당 줄에서 원하는 패턴을 모두 찾아 한건 한 건 꺼내어서
    for match in re.finditer(pattern, line):
# 찾은 값을 뿌림.
        print (match.groups())
cs

 

  근데 해당 파일을 c:\Python\code 폴더에 reg_sample1.py 로 저장해서 실행하면 아래와 같이 빈 괄호 기호만 나오게 된다.

c:\Python\code>python reg_sample1.py
()

 

 

  샘플이 잘못된거 같진 않은데 왜 그럴까? 원인을 찾기위해서 처음 찾았던 파이썬 공식 페이지의 regular expression 페이지에서 groups 에 대한 내용을 본다. (7.2.4 Match Objects) 페이지에 있는 group 과 groups 예제를 보니, groups 는 기본적으로 튜플로 반환하고(현재로서는 리스트랑 튜플이 뭐가 다른진 모른다), group(0) 을 하거나 group() 을 했을 때 전체 결과를 문자열로 반환한다고 한다. 그래서 마지막 print 문 안의 groups 를 group 으로 바꿔 보았다.

https://docs.python.org/2/library/re.html

 

1
2
3
4
5
6
7
8
9
10
11
12
13
#-*- coding: utf-8 -*-
# regular expression 모듈 임포트
import re
 
# 정규 표현식 패턴 등록(처음 시작이 < 이고 > 로 닫히는 단어)
pattern = re.compile("^<.*>")
 
# reg.txt 파일을 한줄 한줄 가져와서(enumerate) 루프를 돌리면서
for i, line in enumerate(open('reg.txt')):
# 해당 줄에서 원하는 패턴을 모두 찾아 한건 한 건 꺼내어서
    for match in re.finditer(pattern, line):
# 찾은 값을 뿌림.
        print (match.group()) #여기 변경
cs

c:\Python\code>python reg_sample1.py
<hi>

 

  흠 근데 실행해 보니 s 만 하나 뺐을 뿐인데, 값이 제대로 출력되어 나온다. 원래대로라면 groups 가 아무리 튜플이라는 리스트 비슷한 구조로 표시한다 하더라도, 안에 뭔가 들었기 때문에 어떤 결과든 나와야 할것 같은데, 상식적으로 빈 괄호로만 나오는게 이해가 안된다. 그럼 뭔가 원인이 있을테니 구글에 좀더 자세히 검색해 본다. 'python regular expression group vs groups'. 가운데 쯤 나오는 스택 오버플로우 페이지에 원하던 설명이 나오는 것 같다.

http://stackoverflow.com/questions/9347950/whats-the-difference-between-groups-and-group-in-pythons-re-module

 

groups() only returns any explicitly-captured groups in your regex (denoted by ( round brackets ) in your regex), whereas group(0) returns the entire substring that's matched by your regex regardless of whether your expression has any capture groups.

-> 결국 우리가 패턴을 등록할때 명시적으로 그룹이 나올 수 있도록 정규식 내에 넣는 '( )' 부분이 없기 때문이라고 한다.

  ※ group 에 대한 설명은 정규 표현식을 정식으로 공부하다보면 알수 있다. 파이썬으로 예를 들면, 클래스 개념 같은 약간 고급의 응용 문법이다.

 

 

  그럼 해당 부분을 증명하기 위해 첫번째 에러난 코드를 한번 수정해 보자. 패턴 부분을 ( )로 감싸서 그룹 결과가 나오게 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#-*- coding: utf-8 -*-
# regular expression 모듈 임포트
import re
 
# 정규 표현식 패턴 등록(처음 시작이 < 이고 > 로 닫히는 단어)
pattern = re.compile("(^<.*>)")  #패턴을 가로로 감싸보자
 
# reg.txt 파일을 한줄 한줄 가져와서(enumerate) 루프를 돌리면서
for i, line in enumerate(open('reg.txt')):
# 해당 줄에서 원하는 패턴을 모두 찾아 한건 한 건 꺼내어서
    for match in re.finditer(pattern, line):
# 찾은 값을 뿌림.
        print (match.groups())
cs
c:\Python\code>python reg_sample1.py
('<hi>',)

 

  자 이제 결과가 나오고 찾은 설명이 맞았다는게 증명됬다.

 

  부록으로 그럼 첫번째 잘 돌아간 reg_sample1.py 에서 group 을 출력하는 부분에서 <> 를 제외한 hi 만 가져오려 한다면 어떻게 될까? 이럴때 우리를 괴롭혔던 그룹표시() 가 반대로 도움을 준다. 패턴 코드에서 re.compile("^<(.*)>") <- 요렇게 안쪽에 괄호를 써보자 그럼 <> 안에 있는 어떤 글자든(.) 0개 이상 나오면(*) 1번째 그룹으로 지정이 된다. 그후 match.group(1) 로 수정해서 첫번째 그룹을 가져온다. 저장하고 실행 하면 아래와 같이 'hi' 만 가져오게 된다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
#-*- coding: utf-8 -*-
# regular expression 모듈 임포트
import re
 
# 정규 표현식 패턴 등록(처음 시작이 < 이고 > 로 닫히는 단어)
pattern = re.compile("^<(.*)>") #원하는 부분에 괄호 넣기
 
# reg.txt 파일을 한줄 한줄 가져와서(enumerate) 루프를 돌리면서
for i, line in enumerate(open('reg.txt')):
# 해당 줄에서 원하는 패턴을 모두 찾아 한건 한 건 꺼내어서
    for match in re.finditer(pattern, line):
# 찾은 값을 뿌림.
        print (match.group(1)) #여기 변경 #1번 그룹을
cs

c:\Python\code>python reg_sample1.py
hi

 

 

 

  그럼 하나만 하면 정이 없으니 하나 샘플을 더 만들어 보려고 한다. 먼저 c:\Python\code 폴더에 reg2.txt 파일을 만들어 아래 내용을 넣는다.

1
2
3
4
5
6
7
1cake - Right
jelly 12hey - Wrong
maybe12 - Wrong
    3joy - Wrong
4432 - Right
23b - Right
  5555b - Wrong
cs

 

  자 위에서 Right 라고 적힌 3개의 줄 내용만 출력하고 싶다. 3개의 공통 점은 무엇 일까? 숫자로 시작되고 줄 처음에서 시작된다는 것이다. 그럼 위에서 사용한 정규 표현식에다 두 가지 개념만 더 추가함 된다. 1) "숫자로 시작한다는 것" 2) "문장 전체를 가져오려 한다는것". 해당 부분을 목표로 정규 표현식을 작성하면 다음과 같다. ^[0-9]+.*

 

  설명하자면 "숫자가([0-9]) 한개이상 (+) 문장의 맨처음에 나온다(^)", "이후엔 아무 문자나(.) 나오거나 말거나 상관없다(*)" 이다. 

 

  그럼 위의 잘 돌아갔던 소스를 가져다가 파일 가져오는 부분과, 정규 표현식 패턴 부분만 수정해 보자. 해당 파일을 c:\Python\code 폴더에 reg_sample2.py 로 저장해서 실행하면 아래와 같이 Right 줄만 3개 나오게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#-*- coding: utf-8 -*-
# regular expression 모듈 임포트
import re
 
# 정규 표현식 패턴 등록(처음 시작이 < 이고 > 로 닫히는 단어)
pattern = re.compile("^[0-9]+.*"
 
# reg.txt 파일을 한줄 한줄 가져와서(enumerate) 루프를 돌리면서
for i, line in enumerate(open('reg2.txt')):
# 해당 줄에서 원하는 패턴을 모두 찾아 한건 한 건 꺼내어서
    for match in re.finditer(pattern, line):
# 찾은 값을 뿌림.
        print (match.group())
cs

c:\Python\code>python reg_sample2.py
1cake - Right
4432 - Right
23b - Right

 

 

 

[마무리 하면서]

  이 시점에서 우리가 한번 생각해 봐야할 부분이 있다는 생각이 든다. 프로그래밍을 스트레스를 덜 받으면서 하려면, 도메인 지식이나, 정규 표현식 같이 다양하게 연결된 배경 지식들을 잘 알고 있어야 하듯이, 정규 표현식을 잘 쓰려면, 문법 이외에도, 적용하려는 데이터의 패턴을 정규 표현식에서 지원하는 방식으로 인지 할 수 있어야 한다. 만약 적절한 패턴이 없다면 데이터가 만들어질 때부터 가능한 패턴을 가지도록 디자인 하는 부분을 고려해야 할지도 모른다. 어찌 보면 정규 표현식의 문법에 대해서 아는 것보다 이러한 부분이 더 중요하고 어려운 문제일 수도 있다. 이것은 프로그래밍 뿐만 아니라 다른 여러 분야도 비슷한 부분들이 많다. 너무 트랜드에만 휩쓸리진 말고 손가락 보다는 손가락이 가르키는 대상을 보려고 노력하자^^

http://m.blog.naver.com/sukbongcho/10157104127

 

 

  그러면 얼렁 뚱땅 넘어가긴 했지만, 이렇게 정규 표현식(자꾸 정규식이라고 쓴다. 그림 등에 오타가 있는데 그러려니 해주시길... --;) 편을 마치 겠다. 배워야 할께 너무 많은 세상이지만 기초적인 부분은 꼭 찬찬히 짚어가면서 걸어가시길 바라면서..

 

 

 

 

[보충]

  본문에 나왔던 '튜플'에 대해서 궁금해서 찼아봤다. 튜플을 함수형 프로그래밍 등에서 쓰는 불변 값의 리스트로 봐도 좋겠지만, 첫 번째 링크에 나온데로, 인덱스를 가진 작은 읽기전용의 데이터 구조 라고 보는것이 맞을 듯 싶다. 

http://jtauber.com/blog/2006/04/15/python_tuples_are_not_just_constant_lists/

http://news.e-scribe.com/397

 

 

  파이썬 정규식에서 사용하는 search, match, findall, findIter 로 찾는 차이가 궁금해서 정리한다.

> search - 맨 처음 만나는 문자열을 match object 구조로 반환한다.

> match - search 아 다른 점은 항상 패턴 앞에 ^(문장 처음) 가 있는 것처럼 판단하다.

> findall - 해당 되는 문자열을 모두 찾아 문자열 리스트로 반환한다.

> finditer - 해당되는 문자열을 모두 찾아 match object 형태의 iterator 로 반환한다. 그래서 위의 예제 들에서 이 개체를 이용해서 루프를 돌리며 match object 의 group 속성을 얻어냈다.

 

 

 

1
2017.3.5 by 자유로운설탕
cs
posted by 자유로운설탕