정규식
정규식
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') |