Successfully reported this slideshow.
Your SlideShare is downloading. ×

PyCon APAC 2016 Regular Expression[A-Z]+

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

PyCon APAC 2016 Regular Expression[A-Z]+

  1. 1. Regular Expression[A-Z]+ PYCON APAC 2016 양민지 MATA COMPANY minji@matazoo.net
  2. 2. 발표자 소개 양민지 / 검객 개발자 현) MATA COMPANY Software Engineer DEVSISTERS, The Beatpacking Company NEXON Python 보조강사, Django Girls 코치
  3. 3. 발표에 앞서 이 발표에서는 Python3 를 사용합니다. 이 발표로 정규표현식을 완전히 이해할 수는 없습니다
  4. 4. 다루는 내용 Why Regex? 간단한 예제 x 3 The re module 연습문제와 성능 팁 그 외 유용한 것들
  5. 5. Why regex? 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 식 문자열의 검색이나 치환에 편리하다. 100312467“WhySoLonely”“wondergirls”3014725201603062016-03-20T12:00:35+09:00 ->“WhySoLonely”“wondergirls”2016-03-20T12:00
  6. 6. /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9] [0-9]?).){3}(?:25[0-5]|2[0-4][0-9]| [01]?[0-9][0-9]?)$/
  7. 7. WHAAAAT?
  8. 8. How to learn regex? 처음에는 복잡하고 읽을수 없어 어렵게 느껴진다. 하지만 정규표현식은 생각보다 어렵지 않다.
  9. 9. 간단한 예제 x 3
  10. 10. 예제 1 핸드폰 번호 매칭 010-3333-7777 d{3}-d{4}-d{4}
  11. 11. 예제 2 웹사이트 주소에서 host 이름 가져오기 http://www.google.com/?q=pycon http://([^/]*)/?q=pycon
  12. 12. 예제 3 이메일 주소에서 아이디 꺼내먹어요 minji@matazoo.net ^([^@]+)@.+$
  13. 13. The re module
  14. 14. re module Python에서는 re 모듈로 정규 표현식을 처리합니다. import re re.search(pattern, string)
  15. 15. re module >>> re.search(‘abcd’, ‘abcdef’) <_sre.STR_Match object at 0X120670cc2> >>> re.search(‘zxc’, ‘abcdef’) None
  16. 16. 다시 만나는 예제 x 3
  17. 17. re.sub() import re phone = '010-1234-5678' re.sub( r'(d{3}-d{4}-)(d{4})', r'1****', phone ) >>> ’010-1234-****'
  18. 18. re.match() import re link = 'http://www.google.com/?q=pycon' match = re.match( r’(http://)([^/]*)(.*)’, link ) match.group(2) >>> 'www.google.com'
  19. 19. re.search() import re email = 'minji@matazoo.net' match = re.search('^[^@]*', email) match.group() >>> 'minji'
  20. 20. match vs search import re sample = '2016pycon' re.match('[a-z]+', sample) >>> None re.search('[a-z]+', sample) >>> <_sre.SRE_Match object; span=(4, 8), match='pycon'>
  21. 21. re module re.search(pattern, string, flags=0) = match되는 첫번째 문자열을 찾아줌 re.match(pattern, string, flags=0) = string 처음부터 match되는지 확인 re.findall(pattern, string, flags=0) = string 전체에서 pattern과 일치하는 것을 모두 찾아 list로 돌려 줌
  22. 22. Character classes . 줄바꿈 문자를 제외한 모든 문자와 매치됨 d 모든 숫자와 매치됨 [0-9] D 숫자가 아닌 문자와 매치됨 [^0-9] w 숫자 또는 문자와 매치됨 [a-zA-Z0-9] (파이썬에선 숫자도 포함) W 숫자 또는 문자가 아닌 것과 매치됨 [^a-zA-Z0-9] s 화이트 스페이스 문자와 매치됨 S 화이트 스페이스가 아닌 것과 매치됨
  23. 23. Anchors and Repetition ^abc$ 문자열의 시작/ 문자열의 마지막과 매치됨 * 0회 이상 반복 + 1회 이상 반복 ? 0회 또는 1회 {x} x회 반복 (e.g {3} ) {x,y} x회부터 y회까지 반복 [abc] 문자 집합 중 한 문자를 의미 [^abc] a,b,c 가 아닌 문자 [a-d] a, b, c or d 사이에 있는 문자를 의미
  24. 24. 연습문제 풀어봅시다
  25. 25. <html op="news"><head><meta name="referrer" content="origin"><meta name="viewport" content="width=device-width, initial- scale=1.0"><link rel="stylesheet" type="text/css" href="news.css? 8h9C3zM9d2ErvunVTkjK"> <link rel="shortcut icon" href="favicon.ico"> <link rel="alternate" type="application/rss+xml" title="RSS" href="rss"> <title>Hacker News</title></head><body><center><table id="hnmain" border="0" cellpadding="0" cellspacing="0" width="85%" bgcolor="#f6f6ef"> <tr><td bgcolor="#ff6600"><table border="0" cellpadding="0" cellspacing="0" width="100%" style="padding: 2px"><tr><td style="width:18px;padding-right:4px"><a href="http:// www.ycombinator.com"><img src="y18.gif" width="18" height="18" style="border:1px white solid;"></a></td> <td style="line-height:12pt; height:10px;"><span class="pagetop"><b class="hnname"><a href="news">Hacker News</a></ b>
  26. 26. link: https://bugzilla.mozilla.org/show_bug.cgi? id=1173199#c31 
 title: “Our primary goal is to un-fork the Tor Browser” link: http://siliconangle.com/blog/2016/08/05/watson- correctly-diagnoses-woman-after-doctors-were-stumped/ 
 title: IBM Watson correctly diagnoses a form of leukemia link: http://gping.io 
 title: Show HN: Gping.io – Like TinyURL for your car link: http://bit-player.org/2016/the-39th-root-of-92 
 title: The 39th Root of 92 link: http://www.sciencealert.com/we-just-got-even- weirder-results-about-the-alien-megastructure-star 
 title: Tabby's star is dimming at an incredible rate 우리가 원하는 Output
  27. 27. regex 안쓰고 코딩해보기
  28. 28. re.DOTALL ?? data = ‘<title>nPYCON APAC 2016nnRegular Expressionsnn</title>n’ re.search(‘<title>(.*)</title>’, data).group(1) AttributeError: 'NoneType' object has no attribute ‘group' re.search(‘<title>(.*)</title>’, data, re.DOTALL).group(1) 'nPYCON APAC 2016nnRegular Expressions[A-Z]+nMinji Yangn’
  29. 29. re.compile
  30. 30. 그 외 유용한 것들 Vim: Find and Replace :%s/old/new/g http://vimregex.com/ 1033303 -> 1233303, 1033213 -> 1233213 :%s/103(d{4})/1231/g
  31. 31. str.find vs re.match vs in http://stackoverflow.com/questions/4901523/whats-a-faster-operation-re-match-search-or-str-find
  32. 32. str.find vs re.match vs in http://stackoverflow.com/questions/4901523/whats-a-faster-operation-re-match-search-or-str-find strfind : 0.441393852234 re.match: 2.12302494049 in : 0.251421928406
  33. 33. WHAAAAT?
  34. 34. 성능 정규표현식의 성능은 좋지 않다 하지만 코딩은 편리하다 성능이 중요한 코드에는 regex 가 답이 아닐 수 있다
  35. 35. print(“Thank You”)

×