Dolphins의 HelloWorld
Python의 정규식 본문
정의
특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어.
문자열 비교나 처리를 하기 용이한 와일드카드 표현식.
정규식의 규칙
^ 라인의 처음을 매칭
$ 라인의 끝을 매칭
. 줄바꿈 문자인 '\n'을 제외하고 모든 문자와 매칭
\s 공백 문자를 매칭
\S 공백이 아닌 문자를 매칭
* 반복되는 문자를 매칭
+ 한번이상 반복될 때 사용
[abc] a,b,c 중 한개의 문자와 매치
[a-z0-9] - 기호로 문자 범위 명시
? 있어도 되고 없어도 될 때
정규식 활용
정규식을 사용하기 위해서는 먼저 re모듈을 import 해주어야 한다.
dir 명령어를 써서 re를 통해 사용할 수 있는 메소드들을 출력해보면 다음과 같다.
여기에 있는 함수들 중 search는 라이브러리의 find 메소드와 같은 역할을 한다.
어떤 패턴을 쓰느냐에 따라 다양하게 정규식을 사용할 수 있는데 예를들어
문장의 시작을 의미하는 ^를 통해 startswith같이 사용할 수 있다.
아래의 코드를 통해 좀더 살펴보겠다.
import re handle = open('my_text.txt','r') for line in handle: if re.search('^David',line): print(line) #David로 시작하는 line을 출력하기 위해 ^를 사용 handle = open('my_text.txt','r') for line in handle: if re.search('From\s:',line): print(line) #From과 : 사이에 공백이 있는 줄만 출력하기위해 \s를 사용
다음으로는 findall 메소드를 사용해 본 예시이다.
import re s = 'number 42 number 100 character A charater BCd' result = re.findall('[0-9]+',s) print(result) result = re.findall('[A-Z]+',s) print(result)
찾고자하는 문자열이 배열형식으로 저장되는 것을 볼 수 있다.
Greedy Matching & Non Greedy Matching
findall함수를 썼을 때 결과값은 기본적으로 greedy한 특성을 가지는데 쉽게 말해서
정규식을 만족하는 것 중 가장 긴것을 가져온다는 것이다.
예를들어 'What's wrong? Why so serious?' 라는 문장에서
re.findall('^W.+[?]',s) 라는 명령어를 사용하면
결과값으로 'What's wrong? Why so serious?' 이 나온다.
이 결과값을 Non Greedy하게, 즉 만족하는 것중 가장 짧은 것을 가져오도록 하려면
패턴뒤에 물음표를 붙여주면 된다. 아래의 코드를 통해 확인해보록 하자.
import re s = 'What\'s wrong? Why so serious?' result = re.findall('^W.+[?]',s) print(result) result = re.findall('^W.+?[?]',s) print(result)
'python' 카테고리의 다른 글
Python의 정규식2 (0) | 2018.07.09 |
---|---|
Python의 tuple (0) | 2018.07.06 |
Python의 Dictionary (0) | 2018.07.06 |
Python의 list2 (0) | 2018.07.05 |
Python의 파일 입출력 (0) | 2018.07.05 |