Python

정규식

Yokina 2017. 1. 7. 23:26

정규식


import re

url=’<a href=”c:\python\koala.jpg”>코알라</a><font size=”10”>’

print(re.search(‘href=”(.*?)”>’, url).group(1))

#위 정규식으로 c:\python\koala.jpg 출력



문법

설명

.

임의의 한 문자가 존재

?

바로 앞의 문자가 존재하거나 존재하지 않음

*

바로 앞의 문자가 존재 하지 않거나 무한대로 존재

+

바로 앞의 문자가 한번 이상 존재

^

바로 뒤의 문자로 문자열이 시작

$

바로 앞의 문자로 문자열이 끝남

{숫자}

숫자만큼 반복

{숫자,}

숫자 이상만큼 반복

{숫자1, 숫자2}

숫자 1 이상 , 숫자 2 이하 만큼 반복

{문자열}

문자나 문자열을 묶음

[문자1, 문자2…]

대괄호 안에 있는 문자들이 존재하는지 검색

[^ ]

^기호 바로 뒤에 문자 존재하지 않음

[:alpha;]

알파벳만 검색

[:alnum:]

알파벳, 숫자만 검색

[:digit:]

숫자만 검색

[:upper:]

대문자만 검색

\\

‘\’ 검색

\d

모든 숫자를 검색, [0-9]와 동일

\D

숫자를 제외한 모든 문자를 검색

\s

공백을 검색

\S

공백이 아닌 문자를 검색

\w

숫자 또는 문자를 검색(a-zA-Z0-9]

\W

숫자 또는 문자가 아닌 것을 검색







re module  주요함수


주요함수이름

설명

compile

(pattern[,flags])

pattern을 컴파일하여 정규식 객체를 반환

match

(pattern, string[,flags])

string의 시작부분부터 해당 pattern이 존재하는지 검사하여 Match되는 Object 반환

search

(pattern, string[,flags])

string 전체가 pattern과 동일한지 검사하여 Match될 경우 결과를 반환

split

(pattern, string[,maxplit=0])

pattern을 구분자로 기준하여 string을 분리하여 결과값을 리스트로 반환

findall

(pattern, string[,flags])

string에서 pattern을 만족하는 문자열을 찾아서 리스트로 반환

sub

(pattern, repl, string[,count=0])

string에서 pattern과 일치하는 부분을 주어진 repl문자로 교체하여 결과 문자열 반환

subn

(pattern, repl, string[,count=0])

sub와 동일하나 결과(결과문자열, 매칭횟수)를 튜플로 반환

escape

(string)

영문자, 숫자를 제외한 문자들을 백슬래쉬로 지정해서 리턴

(임의의 문자열을 정규식 패턴으로 사요할경우 유용)



import re

r = re.compile("[aA]")

print(r.search("pizza"))

print(r.match("pizza")) #결과값으로 none가 나옴


# 다른방법

re.search("[pP]", "apPle")

re.match("[pP]", "pP")


compile 을 통하여 패턴의 해석을 한후 검색. 동일 패턴의 많은 or 반복적인 경우 매번 해석하는 아래의 방식보다 빠르다.


.기호 - 임의의 한문자르 의미

r = re.compile("a.c")

r.search("abc") #  match

r.search("afc") # match

r.search("ac") # unmatch

?기호 - ?기호 바로 앞의 문자가 존재하거나 존재 하지 않음

r = re.compile("ak?w")

r.search("cw") #match

r.search("ckw") #match

r.search("ckkw") #unmatch

r.search("ckk") #unmatch

r.search("kkkw") #unmatch


*기호 - *기호 앞의 문자 존재하지 않거나 개수와 상관없이 존재

r = re.compile("ck*w")

r.search("cw") #match

r.search("ckw") #match

r.search("ckkw") #match

r.search("ckk") #unmatch

r.search("kkkw") #unmatch


+기호 - +기호 앞의 문자가 한번 이상 존재

r = re.compile("ck+w")

r.search("ckw") #match

r.search("ckkkkkkkkw") #match

r.search("ckkkkkk") #unmatch

r.search("cw") #unmatch


^기호 - 시작되는 문자를 지정

r = re.compile("^c")

r.search("ckw") #match

r.search("sjs") #unmatch


$기호 - 끝나는 문자를 지정함

r = re.compile("e$")

r.search("apple") #match

r.search("banana") #unmatch


[문자문자] - 대괄호 안에 있는 문자들이 존재 하는지 검색

r = re.compile("[abcd"])

r.search("pizza") #match = 'a'

r.search("bread") #match = 'b'

r.search("mashroom") #match = 'a'




[^문자문자] - ^기호 뒤에 문자들을 제외한 글자 검색

re.search("[^ap]", "apple") #match = 'l'

re.search("[^ap]", "bread") #match = 'r'

re.search("[^ap]", "orange") #match = 'o'


범위 지정 가능

re.search("[a-g]", "apple") #match = 'a'

re.search("[0-5]", "12345678") #match = '1'

re.search("[가-사]", "강원도에서") #match = '강'


예정된기호문자

기호

정규식

설명

\s

[\t\n\r\f\v]

공백과 각종 이스케이프 코드

\S

[^\t\n\r\f\v]

공백과 각종 이스케이프 코드를 제회한 모든 문자

\d

[0-9]

모든 숫자

\D

[^0-9]

숫자를 제외한 모든 문자

\w

[a-zA-Z0-9]

모든 알파벳과 숫자

\W

[^a-zA-Z0-9]

모든 알파벳과 숫자를 제외한 문자


match object 를 변수에 넣기

result = re.search("\d+", "햄버거가 7000원 입니다")

result.start() # 8

result.end() # 12

result.span() # (8, 12)

result.group() # '7000'


re.search("\d+", "햄버거가 7000원 입니다") #match = '7000'

re.search("\d", "햄버거가 7000원 입니다") #match = '7'   (위의 +가 없음)


re.match("\d+", "나는 1985년생 이다") #unmatch

re.match("\d+", "1985년에 태어난 나") #match = '1975'


re.findall("\d+", "나는 1985년 7월 26일 입니다") #match = ['1','9','8','5', '7', '2','6']


re.split("[:]+", 'Apple Orange : Grape Cherry')

re.split("[: ]+", 'Apple Orange : Grape Cherry')


re.sub('-','**','000-000')