Python regex
정규식 컴파일하기
>>> import re
>>> p = re.compile('ab*')
정규식 컴파일하기
>>> import re
>>> p = re.compile('ab*', re.IGNORECASE)
백슬래시(\) 문제
>>> import re
>>> p = re.compile('\section')
백슬래시(\) 문제
>>> import re
>>> p = re.compile('\\section')
백슬래시(\) 문제
>>> import re
>>> p = re.compile('\\\\section')
백슬래시(\) 문제
>>> import re
>>> p = re.compile(r'\\section')
정규식 검색
컴파일 된 패턴 객체가 제공하는 메소드
match() | 문자열의 처음부터 정규식과 매치되는지 조사한다. |
---|---|
search() | 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. |
findall() | 정규식과 매치되는 모든 문자열(substring)을 리스트로 리턴한다 |
finditer() | 정규식과 매치되는 모든 문자열(substring)을 iterator 객체로 리턴한다 |
실습
match object
group() | 매치된 문자열을 리턴한다. |
---|---|
start() | 매치된 문자열의 시작 위치를 리턴한다. |
end() | 매치된 문자열의 끝 위치를 리턴한다. |
span() | 매치된 문자열의 (시작, 끝) 에 해당되는 튜플을 리턴한다. |
실습2
모듈 단위로 수행하기
>>> m = re.match('[a-z]+', "python")
컴파일에서 사용하는 옵션들
- DOTALL, S
- . 이 줄바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록 한다.
- IGNORECASE, I
- 대소문자에 관계없이 매치할 수 있도록 한다.
- MULTILINE, M
- 여러줄과 매치할 수 있도록 한다. (^, $ 메타문자의 사용과 관계가 있는 옵션이다)
- VERBOSE, X
- verbose 모드를 사용할 수 있도록 한다. (정규식을 보기 편하게 만들수 있고 주석등을 사용할 수 있게된다.)
예제1
>>> p = re.compile('a.b', re.DOTALL)
>>> m = p.match('a\nb')
>>> print(m) <_sre.SRE_Match object at 0x01FCF3D8>
예제2
>>> p = re.compile('[a-z]', re.I)
>>> p.match('python')
<_sre.SRE_Match object at 0x01FCFA30>
>>> p.match('Python')
<_sre.SRE_Match object at 0x01FCFA68>
>>> p.match('PYTHON')
<_sre.SRE_Match object at 0x01FCF9F8>
예제3
import re
p = re.compile("^python\s\w+", re.MULTILINE)
data = """python one
life is too short
python two
you need python
python three"""
print(p.findall(data))
['python one', 'python two', 'python three']
예제4
group
- group(0) - 매치된 전체 문자열
- group(1) - 첫번째 그룹에 해당되는 문자열
- group(2) - 두번째 그룹에 해당되는 문자열
>>> p = re.compile(r"(\w+)\s+((\d+)[-]\d+[-]\d+)")
>>> m = p.search("park 010-1234-1234")
>>> print(m.group(3))
010
group
- group(0) - 매치된 전체 문자열
- group(1) - 첫번째 그룹에 해당되는 문자열
- group(2) - 두번째 그룹에 해당되는 문자열
>>> p = re.compile(r"(\w+)\s+((\d+)[-]\d+[-]\d+)")
>>> m = p.search("park 010-1234-1234")
>>> print(m.group(3))
010
group
>>> p = re.compile(r"(?P<name>\w+)\s+((\d+)[-]\d+[-]\d+)")
>>> m = p.search("park 010-1234-1234")
>>> print(m.group("name"))
park
sub - 문자열 바꾸기
>>> p = re.compile('(blue|white|red)')
>>> p.sub('colour', 'blue socks and red shoes')
'colour socks and colour shoes'
Python regex
By Ming Kim
Python regex
- 571