Python

[Python] 정규 표현식 예제 실습 ( compile , search )

Acdong 2020. 11. 16. 17:00
728x90

1) .기호

.은 한 개의 임의의 문자를 나타냅니다.

예를 들어서 정규 표현식이 a.c라고 합시다.

a와 c 사이에는 어떤 1개의 문자라도 올 수 있습니다.

즉, akc, azc, avc, a5c, a!c와 같은 형태는 모두 a.c의 정규 표현식과 매치됩니다.

import re
r=re.compile("a.c")
r.search("kkk") # 아무런 결과도 출력되지 않는다.
r.search("abc")
<_sre.SRE_Match object; span=(0, 3), match='abc'>  

(.)은 어떤 문자로도 인식될 수 있기 때문에

abc라는 문자열은 a.c라는 정규 표현식 패턴으로 매치되는 것을 볼 수 있습니다.

 


2) ?기호

?는 ? 앞의 문자가 존재할 수도 있고, 존재하지 않을 수도 있는 경우를 나타냅니다.

예를 들어서 정규 표현식이 ab?c라고 합시다.

이 경우 이 정규 표현식에서의 b는 있다고 취급할 수도 있고, 없다고 취급할 수도 있습니다.

즉, abc와 ac 모두 매치할 수 있습니다.

import re
r=re.compile("ab?c")
r.search("abbc") # 아무런 결과도 출력되지 않는다.
r.search("abc")
<_sre.SRE_Match object; span=(0, 3), match='abc'>  

b가 있는 것으로 판단하여 abc를 매치하는 것을 볼 수 있습니다.

r.search("ac")
<_sre.SRE_Match object; span=(0, 2), match='ac'>  

re.match() 와 re.search()의 차이

search()가 정규 표현식 전체에 대해서 문자열이 매치하는지를 본다면,

match()는 문자열의 첫 부분부터 정규 표현식과 매치하는지를 확인합니다.

문자열 중간에 찾을 패턴이 있다고 하더라도, match 함수는 문자열의 시작에서 패턴이 일치하지 않으면 찾지 않습니다.

import re
r=re.compile("ab.")
r.search("kkkabc")
<_sre.SRE_Match object; span=(3, 6), match='abc'>
r.match("kkkabc")  #아무런 결과도 출력되지 않는다.
r.match("abckkk")
<_sre.SRE_Match object; span=(0, 3), match='abc'>

re.split()

split() 함수는 입력된 정규 표현식을 기준으로 문자열들을 분리하여 리스트로 리턴합니다.

import re
text="사과 딸기 수박 메론 바나나"
re.split(" ",text)
['사과', '딸기', '수박', '메론', '바나나']  

 

re.findall()

findall() 함수는 정규 표현식과 매치되는 모든 문자열들을 리스트로 리턴합니다.

단, 매치되는 문자열이 없다면 빈 리스트를 리턴합니다.

import re
text="이름 : 김철수
전화번호 : 010 - 1234 - 1234
나이 : 30
성별 : 남"""  
re.findall("\d+",text)
['010', '1234', '1234', '30']

 

출처 : wikidocs.net/21703

반응형