Dolphins의 HelloWorld

Python의 정규식 본문

python

Python의 정규식

돌핀's 2018. 7. 9. 16:43

정의


특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어.


문자열 비교나 처리를 하기 용이한 와일드카드 표현식.




정규식의 규칙


^ 라인의 처음을 매칭


$ 라인의 끝을 매칭


. 줄바꿈 문자인 '\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
Comments