사용자 도구

사이트 도구


kb:pythonregularexpression

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

kb:pythonregularexpression [2014/11/09 21:00] (현재)
줄 1: 줄 1:
 +====== Python Regular Expression ======
 +파이썬 정규식 관련 기능은 re 모듈에 들어있다. 컴파일해서 사용할 수도 있고, 바로 사용할 수도 있는데, 자세한 것은 파이썬 매뉴얼을 참고.
 +
 +
 +====== 검색 ======
 +검색에는 match, search, findall, finditer 이 4가지 함수를 이용할 수 있다.
 +
 +**match** 함수는 문자열의 제일 앞쪽부터 주어진 정규식과 일치하는지를 검사한다. 정규식과 일치한다면 MatchObject를 반환하고,​ 일치하지 않는다면 None을 반환한다.
 +<​code>​
 +match(pattern,​ string[, flags]) ​
 +</​code>​
 +
 +<code python>
 +import re
 +print(re.match("​[a-z]+",​ "​abcd"​))
 +print(re.match("​[a-z]+",​ "​abcd12"​))
 +print(re.match("​[a-z]+",​ "​12abcd"​))
 +print(re.match("​[a-z]+",​ "​1234"​))
 +</​code>​
 +
 +<​code>​
 +<​_sre.SRE_Match object at 0x00B368E0>​
 +<​_sre.SRE_Match object at 0x00B368E0>​
 +None
 +None
 +</​code>​
 +
 +**MatchObject**의 기능은 다음과 같다.
 +
 +^ 함수 ^ 목적 ^
 +| group(index) | 정규식과 일치하는 부분의 문자열을 반환한다. |
 +| start(index) | 일치하는 부분이 원래 문자열에서 차지하는 시작 인덱스를 반환한다. |
 +| end(index) | 일치하는 부분이 원래 문자열에서 차지하는 끝 인덱스를 반환한다. |
 +| span(index) | 일치하는 부분의 시작과 끝 인덱스를 반환한다. |
 +
 +함수 인자로 들어가는 값은 index 값은 그룹화된 정규식일 경우, 해당하는 그룹의 인덱스다. 주지 않을 경우 기본값으로 0을 사용한다.
 +
 +<code python>
 +import re
 +m = re.match("​[a-z]+",​ "​abcd12"​)
 +print(m.group())
 +print(m.start(0))
 +print(m.end(0))
 +print(m.span())
 +</​code>​
 +
 +<​code>​
 +abcd
 +0
 +4
 +(0, 4)
 +</​code>​
 +
 +**search** 함수는 문자열의 처음이 아니라, 전체를 검사한다는 점을 빼면 match 함수와 크게 다를 것이 없다.
 +<​code>​
 +search( pattern, string[, flags]) ​
 +</​code>​
 +
 +<code python>
 +import re
 +m = re.search("​[a-z]+",​ "​12abcd"​)
 +print(m.group())
 +print(m.span())
 +</​code>​
 +
 +<​code>​
 +abcd
 +(2, 6)
 +</​code>​
 +
 +**findall** 함수는 정규식과 일치하는 모든 문자열들을 찾아, 그 문자열들을 리스트로 반환한다.
 +<​code>​
 +findall( pattern, string[, flags]) ​
 +</​code>​
 +
 +<code python>
 +import re
 +list = re.findall("​[a-z]+",​ "​abcd12efgh"​)
 +print(list)
 +</​code>​ <​code>​
 +['​abcd',​ '​efgh'​]
 +</​code>​
 +
 +**finditer** 함수는 문자열 대신에 MatchObject의 리스트를 반환한다.
 +<​code>​
 +finditer( pattern, string[, flags]) ​
 +</​code>​
 +
 +<code python>
 +import re
 +list = re.finditer("​[a-z]+",​ "​abcd12efgh"​)
 +for match in list:
 +    print(match.span())
 +</​code>​
 +
 +<​code>​
 +(0, 4)
 +(6, 10)
 +</​code>​
 +
 +
 +====== 치환 ======
 +치환에는 split, sub, subn 이 3가지 함수를 이용할 수 있다.
 +
 +**split** 함수는 주어진 정규식을 기준으로 문자열을 나누어, 그 리스트를 반환한다. 괄호를 쓰지 않으면 정규식과 일치하는 부분의 문자열은 날아간다.
 +<​code>​
 +split( pattern, string[, maxsplit = 0]) 
 +</​code>​
 +
 +<code python>
 +import re
 +list = re.split("​[a-z]+",​ "​abcd12efgh"​)
 +print(list)
 +</​code>​
 +
 +<​code>​
 +['',​ '​12',​ ''​]
 +</​code>​
 +
 +<code python>
 +import re
 +list = re.split("​([a-z]+)",​ "​abcd12efgh"​)
 +print(list)
 +</​code>​
 +
 +<​code>​
 +['',​ '​abcd',​ '​12',​ '​efgh',​ ''​]
 +</​code>​
 +
 +**sub** 함수는 정규식과 일치하는 부분의 문자열을 주어진 문자열로 치환한다.
 +<​code>​
 +sub( pattern, repl, string[, count]) ​
 +</​code>​
 +
 +<code python>
 +import re
 +list = re.sub("​([a-z]+)",​ "​wxyz",​ "​abcd12efgh"​)
 +print(list)
 +</​code>​ <​code>​
 +wxyz12wxyz
 +</​code>​
 +
 +**subn** 함수는 반환값이 ('​치환한 문자열',​ 치환 횟수)의 튜플이라는 점만 빼고는, sub 함수와 똑같다.
 +<​code>​
 +subn( pattern, repl, string[, count]) ​
 +</​code>​
 +
 +<code python>
 +import re
 +list = re.subn("​([a-z]+)",​ "​wxyz",​ "​abcd12efgh"​)
 +print(list)
 +</​code>​
 +
 +<​code>​
 +('​wxyz12wxyz',​ 2)
 +</​code>​
 +
 +====== 링크 ======
 +  * [[http://​www.amk.ca/​python/​howto/​regex/​ | Regular Expression HOWTO]]
 +  * [[http://​docs.python.org/​lib/​module-re.html | Python Library Reference: re -- Regular expression operations]]
 +
 +----
 +  * see also [[Python]], [[RegularExpression]]
  
kb/pythonregularexpression.txt · 마지막으로 수정됨: 2014/11/09 21:00 (바깥 편집)