728x90
반응형
파이썬에서 정규 표현식을 지원하는 re 모듈
파이썬은 정규 표현식을 지원하기 위해 re(regular expression의 약어) 모듈을 제공한다. re 모듈은 파이썬을 설치할 때 자동으로 설치되는 기본 라이브러리로 사용 방법은 다음과 같다.
import re
p = re.compile('조건문')
re.compile을 사용하여 정규 표현식( 조건문 )을 컴파일한다. re.compile의 결과로 돌려주는 객체 p(컴파일된 패턴 객체)를 사용하여 그 이후의 작업을 수행할 것이다.
match
match 메서드는 문자열의 처음부터 정규식과 매치되는지 조사한다.
import re
p = re.compile('[a-z+]')
m = p.match('python')
n = p.match('3 python')
print(m) # 출력 결과 <re.Match object; span=(0, 1), match='p'>
print(n) # 출력 결과 None
import re
p = re.compile('[a-z+]')
m = p.match( 'string goes here' )
if m:
print('Match found: ', m.group())
else:
print('No match')
//출력결과 : Match found: s
search
search는 문자열의 처음부터 검색하는 것이 아니라 문자열 전체를 검색한다
import re
p = re.compile('[a-z]+')
m2 = p.search("3 python")
m1 = p.search("python")
print(m1) # <re.Match object; span=(0, 6), match='python'>
print(m2) # <re.Match object; span=(2, 8), match='python'>
findall
이번에는 findall 메서드를 수행해 보자.
result = p.findall("life is too short")
print(result)
['life', 'is', 'too', 'short']
"life is too short" 문자열의 'life', 'is', 'too', 'short' 단어를 각각 [a-z]+ 정규식과 매치해서 리스트로 돌려준다.
finditer
이번에는 finditer 메서드를 수행해 보자.
>>> result = p.finditer("life is too short")
>>> print(result)
<callable_iterator object at 0x01F5E390>
>>> for r in result: print(r)
...
<_sre.SRE_Match object at 0x01F3F9F8>
<_sre.SRE_Match object at 0x01F3FAD8>
<_sre.SRE_Match object at 0x01F3FAA0>
<_sre.SRE_Match object at 0x01F3F9F8>
finditer는 findall과 동일하지만 그 결과로 반복 가능한 객체(iterator object)를 돌려준다. 반복 가능한 객체가 포함하는 각각의 요소는 match 객체이다.
match 객체의 메서드
자, 이제 match 메서드와 search 메서드를 수행한 결과로 돌려준 match 객체에 대해 알아보자. 앞에서 정규식을 사용한 문자열 검색을 수행하면서 아마도 다음과 같은 궁금증이 생겼을 것이다.
- 어떤 문자열이 매치되었는가?
- 매치된 문자열의 인덱스는 어디서부터 어디까지인가?
match 객체의 메서드를 사용하면 이 같은 궁금증을 해결할 수 있다. 다음 표를 보자.
method목적
group() | 매치된 문자열을 돌려준다. |
start() | 매치된 문자열의 시작 위치를 돌려준다. |
end() | 매치된 문자열의 끝 위치를 돌려준다. |
span() | 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려준다. |
다양한 정규식 패턴 표현
^ | 이 패턴으로 시작해야 함 | ^abc : abc로 시작해야 함 (abcd, abc12 등) |
$ | 이 패턴으로 종료되어야 함 | xyz$ : xyz로 종료되어야 함 (123xyz, strxyz 등) |
[문자들] | 문자들 중에 하나이어야 함. 가능한 문자들의 집합을 정의함. | [Pp]ython : "Python" 혹은 "python" |
[^문자들] | [문자들]의 반대로 피해야할 문자들의 집합을 정의함. | [^aeiou] : 소문자 모음이 아닌 문자들 |
| | 두 패턴 중 하나이어야 함 (OR 기능) | a | b : a 또는 b 이어야 함 |
? | 앞 패턴이 없거나 하나이어야 함 (Optional 패턴을 정의할 때 사용) | \d? : 숫자가 하나 있거나 없어야 함 |
+ | 앞 패턴이 하나 이상이어야 함 | \d+ : 숫자가 하나 이상이어야 함 |
* | 앞 패턴이 0개 이상이어야 함 | \d* : 숫자가 없거나 하나 이상이어야 함 |
패턴{n} | 앞 패턴이 n번 반복해서 나타나는 경우 | \d{3} : 숫자가 3개 있어야 함 |
패턴{n, m} | 앞 패턴이 최소 n번, 최대 m 번 반복해서 나타나는 경우 (n 또는 m 은 생략 가능) | \d{3,5} : 숫자가 3개, 4개 혹은 5개 있어야 함 |
\d | 숫자 0 ~ 9 | \d\d\d : 0 ~ 9 범위의 숫자가 3개를 의미 (123, 000 등) |
\w | 문자를 의미 | \w\w\w : 문자가 3개를 의미 (xyz, ABC 등) |
\s | 화이트 스페이스를 의미하는데, [\t\n\r\f] 와 동일 | \s\s : 화이트 스페이스 문자 2개 의미 (\r\n, \t\t 등) |
. | 뉴라인(\n) 을 제외한 모든 문자를 의미 | .{3} : 문자 3개 (F15, 0x0 등) |
728x90
반응형
'Python' 카테고리의 다른 글
파이썬(Python) in, not in (0) | 2022.01.30 |
---|---|
[Python 문법] 파이썬 입력 받기(sys.stdin.readline) (0) | 2022.01.28 |
파이썬(Python) : set() (0) | 2022.01.06 |
정규표현식 : 파이썬 개념 잡기 (0) | 2022.01.01 |
sorted 함수 (0) | 2021.12.09 |